es学习之分页

es中的分页是使用fromsize来控制的,如下语句:

GET account/index/_search
{
 "from": 0,"size": 1
}

从索引0开始,查找一条数据。

es分页原理:

es学习之分页_第1张图片

若es存在三个shard,每个shard存在2000条数据,当我想要取得所有数据中的第990到999条数据时,我需要分别从三个shard中的遍历前999条数据,将数据返回给承接请求的那个节点,然后该节点再计算出990到999之间的数据,返回结果。

 

可以看出当请求的数据越深,那么此时的计算量就越大,所以消耗的时间也很长,尽量不要使用分页查询,直接根据数据的id值进行查询效率会更高。

scroll_id的方式仅适用于一次性需要返回全部数据的场景,scroll_id产生的快照将有利于数据的查询,但是不适用于展示数据用的数据分页。

 

scroll_id的解决方式:

GET account/index/_search?scroll=1m
{
  "from": 0,
  "size": 1
}

会返回一个scroll_id,想要从该记录接着向下查需要拿到该记录的scroll_id,快照是有时间限制的,若指定时间内不适用,该快照就会失效。

GET _search/scroll
{
  "scroll":"1m",
  "scroll_id":"DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAIfFi1uM01OTFhrUl8yanBSWlhKdmM4eWcAAAAAAAACIxYtbjNNTkxYa1JfMmpwUlpYSnZjOHlnAAAAAAAAAiAWLW4zTU5MWGtSXzJqcFJaWEp2Yzh5ZwAAAAAAAAIhFi1uM01OTFhrUl8yanBSWlhKdmM4eWcAAAAAAAACIhYtbjNNTkxYa1JfMmpwUlpYSnZjOHln"
}

你可能感兴趣的:(es)