在es上搜索数据时,默认es只会返回10条文档,当我们想获取更多结果,或者只要结果中的一个区间的数据时,可以通过szie和from来指定。
- GET /_search?size=3&from=20
这样会带来一个问题,当我们搜索的时候,如果想取出第10001条数据,那么就相当于每个一分片都要对数据进行排序,取出前10001条文档,然后es再将这些结果汇总再次排序,之后取出第10001条数据。这样对于es来说就会产生相当大的资源和性能开销。如果我们不要求es对结果进行排序,那么就会消耗很少的资源,所以针对此种情况,es提供了scan and scroll的搜索方式。
- GET /old_index/_search?search_type=scan&scroll=1m
- {
- "query": { "match_all": {}},
- "size": 1000
- }
- GET /_search/scroll?scroll=1m
- c2Nhbjs1OzExODpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExOTpRNV9aY1VyUVM4U0
- NMd2pjWlJ3YWlBOzExNjpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExNzpRNV9aY1Vy
- UVM4U0NMd2pjWlJ3YWlBOzEyMDpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzE7dG90YW
- xfaGl0czoxOw==