elasticsearch - Elasticsearch 聚合桶总是只显示 10 个结果
问题描述
我正在使用 Elasticsearch 聚合来加载数据,当传递偏移计数时,响应结果显示正确,但术语聚合结果/存储桶始终只显示 10 个结果。
Map<String, BucketStats> hourAggregations = new HashMap<>();
SearchResponse getResponse = client.prepareSearch( ElasticSearchConstants.INDEX ).setTypes( ElasticSearchConstants.TABLE)
.addAggregation( AggregationBuilders.terms( "name")
.field( "empId" )
.subAggregation( AggregationBuilders.stats( "stats" )
.setQuery( query )
.setFrom( 0 )
.setSize( ( offset + 1 ) * 10 )
.execute().actionGet();
Terms terms = getResponse.getAggregations().get("name");
for ( Terms.Bucket bucket : terms.getBuckets() )
{
//buckets showing only 10 results
}
解决方案
你需要给你的terms
聚合一个大小:
Map<String, BucketStats> hourAggregations = new HashMap<>();
SearchResponse getResponse = client.prepareSearch( ElasticSearchConstants.INDEX ).setTypes( ElasticSearchConstants.TABLE)
.addAggregation( AggregationBuilders.terms( "name")
.field( "empId" )
--> .size(100)
.subAggregation( AggregationBuilders.stats( "stats" )
.setQuery( query )
.setFrom( 0 )
.setSize( ( offset + 1 ) * 10 )
.execute().actionGet();
该setSize()
调用仅影响hits
部分,即结果中的文档集,而不影响聚合。我认为你应该调用它的方式setSize(0)
,因为你只想要聚合值而不是文档。
推荐阅读
- php - ZipArchive 未正确压缩文件
- r - 将带有列表的 Dataframe 写入 CSV
- python - 如何在 python 中使用 if else 语句将列表放入函数中以创建变量?
- node.js - findOneAndUpdate 并发送短信
- excel - 在excel中用另一个列单元格替换单元格的一部分
- html - 如何为 HTA(Html 应用程序)选择 Internet Explorer 的版本?
- javascript - JavaScript - 循环遍历一次只显示一个的非重复值
- android - 如何使数组列表用于其他活动
- python - How does CPython keep track of the type of an object
- laravel - Laravel 不在主机中运行