米鼠商城

多快好省,买软件就上米鼠网

最新项目

人才服务

靠谱的IT人才垂直招聘平台

elasticsearch搜索引擎的常用方法(三) 查找10000条数据之后的数据

  • Elli_ON
  • 2
  • 2020-03-19 12:50

问题:

     es本身默认限制了查找的量为10000条,即 from+size<=10000

报错:

Result window is too large, from + size must be less than or equal to:[10000] but was [10010]. See the scroll api for a more efficient way to requestlarge data sets. This limit can be set by changing the[index.max_result_window] index level parameter

解决方法:

一、修改es的默认配置

1、 在config/elasticsearch.yml中添加配置

max_result_window: 1000000000

2、 使用api修改index的配置

# 修改es中所有的index配置

PUT _all/_settings
{
  "index":{
    "max_result_window": 1000000000
    
  }
}

注意:

    es也限制了max_result_window的大小,最大为10亿。如果你搜索的量(from+size)大于10亿,请使用方法二

 

二、使用search_after方法

顾名思义,查找某个点之后的数据,所以需要用from、size、sort、search_after。

实现翻页:search_after本身是无状态的,需要先记录上一次查询的最后一个状态,再从这个状态开始,进行下一次查询,所以也必须又一个统一的排序字段

查询方法:

1、第一次查询语句

# 查询前一万条数据,根据date倒序排列

GET index_1/_search
{
  "from": 0, 
  "size": 10000, 
  "sort": [
    {
      "date": {
        "order": "desc"
      }
    }
  ], 
  "query": {
    "match_all": {}
  }
}

上述语句查询完之后,每一条结果会多出一个“sort”字段,我需要取最后一条数据的sort,即

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 20000,
    "max_score": null,
    "hits": [

    ......

      {
        "_index": "index_1",
        "_type": "type_1",
        "_id": "107686",
        "_score": null,
        "_source": {
          "content": "历史问题我们两个.大小我们增加还有欢迎.一下然后深圳经验.",
          "date": "2019-09-20 13:42:38"
        },
        "sort": [
          1568986958000
        ]
      }
    ]
  }
}

2、第二次查询语句

# 查询1万条之后的10条数据

GET index_1/_search
{
  "from": -1, 
  "size": 10, 
  "sort": [
    {
      "date": {
        "order": "desc"
      }
    }
  ], 
  "search_after":[1568986958000]
}

注意:

    (1)第二次查询基于第一次查询的结果,search_after的值为第一次查询结果的最后一条数据的sort。

    (2)第二次查询的from一定为-1,from+size仍然不能大于10000

    (3)要想实现翻页,需要每次记录最后查询的sort



城市合伙人全球招募中:400-150-9800

参与线下宏伟蓝图,用业绩说话!
软件线索、软件需求,米鼠网帮你变现!
更灵活的合作模式(不限地域、不限金额、不限项目)
更高额的提成比例(提成是软件项目利润的80%)
利润的核算方式:
以平台公开招标的最低价中标价格为基准,剩下的为利润部分,如对平台的最低中标价格有异议,可以推荐供应商进行竞标。
义务:
1、作为城市合伙人,在该城市利用自身优势推广“米鼠网平台”,拓展甲 方所拥有的“米鼠网平台”实名认证用户和 VIP 用户
2、作为城市合伙人,在该城市利用自身优势推广“米鼠网商城”,并寻求该地域软件产品销售商,促成软件产品销售商委托甲方在“米鼠网商城”上代理销售软件产品销售商的软件产品的交易,并拓展软件产品采购用户促成与甲方的采购交易。



如有侵权请联系邮箱(service@misuland.com)

猜你喜欢

评论留言