ElasticSearch中的分页(size、from)

news/2024/7/5 2:36:14

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

size: 结果数,默认10 
from: 跳过开始的结果数,默认0

如果想每页显示5个结果,页码从1到3,那请求如下:

GET /_search?size=5 
GET /_search?size=5&from=5 
GET /_search?size=5&from=10

注意:应该多注意分页太深或者一次请求太多的结果。结果在返回前会被排序。但是记住一个搜索请求常常涉及多个分片。每个分片生成自己排好序的结果,它们接着需要集中起来排序以确保整体排序正确。

当前数据库中的数据如下:

GET http://127.0.0.1:9200/test/user/_search?size=1#响应结果
{"took": 3,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 4,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "test","_type": "user","_id": "QHi1UoIBpyNh4YQ4T1Sq","_score": 1.0,"_source": {"id": 1001,"name": "张三","age": 20,"sex": "男"}}]}
}

GET http://127.0.0.1:9200/test/user/_search?size=2&from=1# 响应数据
{"took": 1,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 4,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "test","_type": "user","_id": "1002","_score": 1.0,"_source": {"id": 1002,"name": "李四","age": 23,"sex": "女"}},{"_index": "test","_type": "user","_id": "1003","_score": 1.0,"_source": {"id": 1003,"name": "王五","age": 27,"sex": "男"}}]}
}

# 当数据量不够时
GET http://127.0.0.1:9200/test/user/_search?size=6&from=1#响应数据
{"took": 1,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 4,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "test","_type": "user","_id": "1002","_score": 1.0,"_source": {"id": 1002,"name": "李四","age": 23,"sex": "女"}},{"_index": "test","_type": "user","_id": "1003","_score": 1.0,"_source": {"id": 1003,"name": "王五","age": 27,"sex": "男"}},{"_index": "test","_type": "user","_id": "1004","_score": 1.0,"_source": {"id": 1004,"name": "赵六","age": 29,"sex": "女"}}]}
}

在集群系统中深度分页

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

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

        可以看到在分布式系统中,排序结果的花费随着分页的深入而成倍增长。这也是为什么网络搜索引擎中任何语句不能返回多于1000个结果的原因。如微博前端页面返回的页数只有50页,用工具是可以拿到50页以后的数据的。


http://lihuaxi.xjx100.cn/news/260094.html

相关文章

收藏 | 提高数据处理效率的 Pandas 函数方法

作者:俊欣来源:关于数据分析与可视化前言大家好,这里是俊欣,今天和大家来分享几个Pandas方法可以有效地帮助我们在数据分析与数据清洗过程当中提高效率,加快工作的进程,希望大家看了之后会有收获。首先导入…

北航教授吐槽:985高校,成高级蓝翔!

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达 来源:PaperRss、学术志985硕士博士,无疑是受教育程度极高的一个群体,在学历上基本上已经是普通人的天花板了,理论上&#xf…

持续集成(一)为什么我们迫切需要持续集成

摘录自:http://blog.csdn.net/kkkloveyou/article/details/53875987 为什么我们迫切需要持续集成(Continuous Integration) 持续集成(Continuous Integration),也就是我们经常说的 CI,是现代软…

ERP已死,中台已凉,DDD称王!

前段时间,参加了一场闭门技术交流会,讨论的热点是微服务,话题集中在微服务架构拆分到底应该拆多细。有微服务的地方就有 DDD(领域驱动设计),不过即便是专业的技术交流会,也没人能给 DDD 的价值下…

固件模块之间的关系 C语言里面的模块

模块是固件里具体的功能块。 如学校来吗将班级看作固件,班级的每个学生就是单独的模块。 C语言中用函数来实现程序模块。 模块化程序设计是将一个大的任务分解成若干个小任务,再将小任务分解成更小的任务,直到每一个任务都只完成一个独立功能…

收藏!PyTorch常用代码段合集

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习,不错过Datawhale干货 作者:Jack Stark,来源:极市平台来源丨https://zhuanlan.zhihu.com/p/104019160本文是PyTorch常用代码段合集,涵盖基本配置、张…

最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

在讲述这两个算法之前,首先有几个概念需要明白: 二分图: 二分图又称二部图,是图论中的一种特殊模型。设G(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个…

赠书 | 干货!用 Python 动手学强化学习

01了解强化学习新闻报道中很少将强化学 习与机器学习、深度学习、人工智能这些关键词区分开来,所以我们要先介绍什么是强化学习,再讲解其基本机制。强化学习与机器学习、人工智能这些关键词之间的关系;强化学习相对于其他机器学习方法的优点和…