当前位置 > it书童 > elk > 正文
推荐小册
java高效编程
怎样更高效地用 java 编程

juc并发工具库
java并发编程工具库

设计模式
设计模式

jvm调优
jvm调优

rabbitmq实战
rabbitmq实战

redis实战
redis实战

Keepavlied高可用集群
Keepavlied高可用集群

nginx入门到实战
nginx入门到实战

java调试
java调试中遇到的各种坑

java输入输出流
java输入输出流

Elasticsearch 分页

elk it书童 2019-10-04 11:00:29 0赞 0踩 802阅读 0评论

和SQL使用LIMIT关键字返回只有一页的结果一样,Elasticsearch接受fromsize参数:

size: 结果数,默认10
from: 跳过开始的结果数,默认0
# 分页
GET /heros/_search?size=2&from=1

# 结果
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "heros",
        "_type" : "_doc",
        "_id" : "qzYKOW0B3p3gGxF6T7bF",
        "_score" : 1.0,
        "_source" : {
          "name" : "萧峰",
          "gender" : "男",
          "skill" : "降龙十八掌",
          "age" : 30
        }
      },
      {
        "_index" : "heros",
        "_type" : "_doc",
        "_id" : "qTbyOG0B3p3gGxF6LrY4",
        "_score" : 1.0,
        "_source" : {
          "name" : "郭靖",
          "gender" : "男",
          "skill" : "降龙十八掌",
          "age" : 52
        }
      }
    ]
  }
}

在集群系统中深度分页

为了理解为什么深度分页是有问题的,让我们假设在一个有5个主分片的索引中搜索。当我们请求结果的第一页(结果1到10)时,每个分片产生自己最顶端10个结果然后返回它们给请求节点(requesting node),它再排序这所有的50个结果以选出顶端的10个结果。

现在假设我们请求第1000页——结果10001到10010。工作方式都相同,不同的是每个分片都必须产生顶端的10010个结果。然后请求节点排序这50050个结果并丢弃50040个!

你可以看到在分布式系统中,排序结果的花费随着分页的深入而成倍增长。这也是为什么网络搜索引擎中任何语句不能返回多于1000个结果的原因。

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/78/elasticsearch-page