首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分页在elasticsearch中的工作原理

问分页在elasticsearch中的工作原理
EN

Stack Overflow用户
提问于 2020-08-11 22:54:47
回答 2查看 58关注 0票数 0

如果我没有指定任何“排序”字段,你能告诉我分页是如何工作的吗?

在我的查询中,如果我没有指定"sort“字段,然后尝试使用"from”加上"size“进行分页,elasticsearch如何返回数据?有没有可能返回重复的记录?

es查询:

代码语言:javascript
复制
GET index1, index2/_search?pretty
{
  "from": 10,
  "size": 20,
  "_source": {"includes”:[“name”, “type”]}, 
   "query":{
      "bool":{
         "must":[
            {
               "term":{
                  "org_id":{
                     "value”:”1234456767257”,
                     "boost":1.0
                  }
               }
            },
            {
        "range" : {
          “Timestamp” : {
            "from" : 1596545417000,
            "to" : 1597035223465,
            "include_lower" : true,
            "include_upper" : true,
            "boost" : 1.0
          }
        }
      }
         ],
         "adjust_pure_negative":true,
         "boost":1.0
      }
   }
}

在上面的查询中,我没有指定任何“排序”字段。如果我在每次调用后增加"from“,这会确保返回唯一的结果吗?如果是,如何选择?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-11 23:09:17

默认情况下,文档按_score:desc排序,如果您经常索引新文档,这可能不是您想要的。

我肯定会添加一个sort clause on _doc,这是保证您将获得唯一结果的唯一方法。

代码语言:javascript
复制
{
  "from": 10,
  "size": 20,
  "sort": [
    {
      "_score": "desc"     <--- add this
    },
    {
      "_doc": "asc"        <--- and this
    }
  ],
  ...
}

另外,如果您考虑在from: 10000之外进行分页,则需要使用leverage search_after

票数 1
EN

Stack Overflow用户

发布于 2020-08-11 23:06:31

默认情况下,通过协调接受客户端请求的节点来对来自不同分片的结果进行排序。

另外,默认情况下,排序是在_score字段上完成的。

是的,没有排序字段,考虑到集群是稳定的,副本与主分片对齐,结果总是唯一的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63360828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档