Java对接ElasticSearch(Es)设置查询数据返回条数
前言
我们在使用Java对接ElasticSearch时,主要的用处也是用作查询,因为ElasticSearch查询效率达到了毫秒级,效果非常显著,但是它有一个默认值让人很烦恼,那就是请求ES查询接口返回过来的数据,默认返回十条,接下来给大家介绍一下,Java对接的查询器要如何修改默认的返回条数。
在使用Java对接ElasticeSearch时,有多种查询器可以选择,第一种为聚合查询器,可以直接通过"size"来设置ElasticSearch返回的数据条数。
/*
TermsAggregationBuilder 聚合查询器
*/
TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders
.terms(TYPE_SUM)
.field(TYPE_KEYWORD)
.size(20);
FilterAggregationBuilder filterAggregationBuilder = AggregationBuilders
.filter(CLOUD_VENDOR_RESOURCE , queryBuilders)
.subAggregation(termsAggregationBuilder);
log.info("Request {}", filterAggregationBuilder);
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
NativeSearchQuery build = builder
.withIndices(CLOUD_RESOURCE)
.addAggregation(filterAggregationBuilder).build();
另一种就是查询生成器,这个就没办法通过"size"来设置了,因为在Es里,query接口并没有"size"方法,所以我们得使用NativeSearchQueryBuilder生成器中分页API来设置返回条数
QueryBuilder queryBuilders = null;
TermsQueryBuilder mustTermsQueryBuilders = null;
TermQueryBuilder mustTermQueryBuilders = null;
MatchAllQueryBuilder mustAllQueryBuilders = null;
TermQueryBuilder filterQueryBuilder = QueryBuilders
.termQuery(TENANT_ID , tenantId);
mustTermQueryBuilders = QueryBuilders
.termQuery(CLOUD_VENDOR_ID , cloudVendorId);
queryBuilders = QueryBuilders
.boolQuery()
.must(mustTermQueryBuilders)
.filter(filterQueryBuilder);
log.info("Request {}", queryBuilders);
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
//设置最大返回条数
Pageable pageable = PageRequest.of(0, 10000);
//withPageable 【设置查询返回条数】
//withIndices 【指定索引】
NativeSearchQuery build = builder
.withPageable(pageable)
.withIndices(CLOUD_RESOURCE_TENANT_QUOTA)
.withQuery(queryBuilders).build();
总结
如果使用聚合查询(AggregationBuilders),可以直接在聚合里设置"size"来控制返回条数
如果使用查询请求生成器(QueryBuilder),就得在最后的请求生成器(NativeSearchQuery)中,通过分页API来实现设置返回条数
最后希望这篇文章对大家有所帮助!