es分页搜索

1、es分页语法
GET /_search?from=起始数&size=页面显示条数
例如:GET /test_index/test_type/_search?from=0&size=3

2、deep paging
什么是deep paging?简单来说,就是搜索的特别深,比如总共有60000条数据,有3个shard上平分了这些数据,每个shard上有20000条数据。要求每页显示10条数据,这个时候你要搜索到第1000页,实际上要拿到的是10001~10010的数据。我们可以思考一下每个shard上的数据是怎么返回的?
每个shard都返回10001~10010条的数据,这样理解是错误的!!!
原理:
你的请求首先可能是打到一个不包含这个index的shard的node上去,这个node就是一个coordinate node,那么这个coordinate note就会将搜索请求转发到这个index的三个shard所在的node上去。
就上面的例子中,实际上每个shard都要将内部的20000条数据中的第10001~10010条数据拿出来,不是10条,是10010条数据。3个shard,每个shard都返回10010条数据给coordinate node,coordinate node会收到总共30030条数据,然后在这些数据中按照_score(相关度分数)进行排序,会在其中取到自己需要的第1000页的数据,然后将这10条数返回给客户端。

搜索的过深的时候,就需要在coordinate node上保存大量的数据,还要进行大量数据的排序,排序之后,再取出对应的那一页数据。这个过程,既耗费网络带宽,耗费内存,还耗费CPU。所以deep paging存在性能的问题,我们应该尽量避免出现这个deep paging操作。

原文地址:https://www.cnblogs.com/qinjf/p/8519460.html