第十一篇 elasticsearch的分页搜索和deep_paging性能问题

1. 分页搜索的语法size,from

GET /_search?size=10
GET /_search?size=10&from=0
GET /_search?size=10&from=20

2. deep paging性能探究

deep paging简单来说,就是搜索的特别深,比如总共有60000条数据,每个shard上分20000条,每页是10条数据,这个时候你要搜索到第1000页,实际上要拿到的是10001-10010,该怎么拿呢?
请求首先可能是打到一个不包含这个index的shard的node上,这个node就是一个coordinate node,这个coordinate node就会将搜索请求转发到index的三个shard所在的node上去。

继续上面的例子,要搜索60000条数据中的第1000页,实际上每个shard都要将内部的20000条数据中的第10001-10010条数据拿出来,不是10条,是10010条数据,3个shard每个shard都返回10010条数据给coordinate node,coordinate node会收到总共30030条数据,然后排序取到所需的那10条数据,其实就是我们要的最后的第1000页的10条数据。

弊端:

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

你可能感兴趣的:(elasticsearch)