一、前言:
ES 普通的分页查询有深分页限制,默认是10000条。(因为越往后面分越耗内存)所以要查询1万条以后的数据,要不就缩小查询范围,要不用别的方法。
ES 提供了 scroll 查询。第一次查询获取到scroll_id,下次查询通过scroll_id直接查询。scroll相当于维护了一份当前索引段的快照信息,这个快照信息是你执行这个scroll查询时的快照。在这个查询后的任何新索引进来的数据,都不会在这个快照中查询到。但是它相对于from和size,不是查询所有数据然后剔除不要的部分,而是记录一个读取的位置,保证下一次快速继续读取。而且也不能排序,只能按默认的文档顺序,比较适合查询扫描全量数据。
1、看一个DEMO
private static void scrollSearch(String indexName, String typeName,
String... ids) {
IdsQueryBuilder qb = QueryBuilders.idsQuery().addIds(ids);
SearchResponse sResponse = client.prepareSearch(indexName)
.setTypes(typeName)
.setQuery(qb)
.setScroll(new TimeValue(5000))
.setSize(50)
.execute()
.actionGet();
int tShards = sResponse.getTotalShards();
long timeCost = sResponse.getTookInMillis();
int sShard