前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ElasticSearch 分页搜索

ElasticSearch 分页搜索

作者头像
smartsi
发布2019-08-07 09:04:42
1.2K0
发布2019-08-07 09:04:42
举报
文章被收录于专栏:SmartSi

1. 分页

之前的文章ElasticSearch 空搜索与多索引多类型搜索我们知道,我们的空搜索匹配到集群中的13个文档。 但是,命中数组中只有10个文档(文章只显示了2条数据,故意省略掉)。 我们如何查看其他文档呢?

与SQL使用LIMIT关键字返回一个’页面’的结果数据相同,Elasticsearch 接受 from 和 size 参数:

  • size 表示应返回的结果数,默认为10
  • from 表示应跳过的初始结果数,默认为0

如果想每页显示五个条数据,那么第1到3页的结果请求如下所示:

代码语言:javascript
复制
curl -XGET 'localhost:9200/_search?size=5&pretty'
curl -XGET 'localhost:9200/_search?size=5&from=5&pretty'
curl -XGET 'localhost:9200/_search?size=5&from=10&pretty'

Java版本:

代码语言:javascript
复制
SearchRequestBuilder searchRequestBuilder = client.prepareSearch();
searchRequestBuilder.setIndices(index);
searchRequestBuilder.setTypes(type);
searchRequestBuilder.setFrom(from);
searchRequestBuilder.setSize(size);
SearchResponse response = searchRequestBuilder.get();

要避免分页太深或者一次请求太多的结果。结果在返回前要进行排序。请记住,搜索请求通常跨越多个分片。每个分片都会生成自己的排序结果,然后在协调节点集中排序,以确保整体顺序正确。

2. 深度分页

为了理解深度分页为什么是有问题的,我们假设在一个有5个主分片的索引中搜索。当我们请求结果的第一页(结果从1到10),每个分片产生自己的前10个结果,并且返回给协调节点 ,协调节点对所有50个结果进行排序,最终返回全部结果的前10个。

现在假设我们请求第1000页的数据–结果从10001到10010。除了每个分片不得不产生前10010个数据以外,其他的都跟上面查询第一页一样。协调节点对全部5个分片的50050个数据进行排序,最后丢弃掉这其中的50040个(只要10个)。

你可以看到,在分布式系统中,排序结果的成本以指数级增长。好消息是,网页搜索引擎一般不会为任何查询返回超过1,000个结果。

Elasticsearch版本:2.x

原文:https://www.elastic.co/guide/en/elasticsearch/guide/2.x/pagination.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 分页
  • 2. 深度分页
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档