【发布时间】:2021-04-22 18:37:48
【问题描述】:
我有以下 JSON 查询正在运行,并且正在做我想做的事:
{
"aggs": {
"values": {
"filter": { "term": { "gender": "Male" } },
"aggs" : {
"names" : {
"terms" : { "field" : "name", "size":10000 }
}
}
}
},
"size":0
}
它正在检索“gener”字段等于“Male”的所有不同名称。这是 elasticseach 中 filter aggregation 的示例。
我现在正在尝试用 spring-data-elasticsearch 编写它,我已经尝试过:
AbstractAggregationBuilder<TermsAggregationBuilder> agBuilder = AggregationBuilders.terms("name").field("name").size(10000);
Query query = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchAllQuery())
.withFilter(QueryBuilders.termQuery("gender", "Male"))
.withPageable(EmptyPage.INSTANCE)
.addAggregation(agBuilder).build();
//Execute request over the cluster
SearchHits<Person> hits = elasticClient.search(query, Person.class);
//Retrieve the aggregation details
Aggregations aggs = hits.getAggregations();
ParsedStringTerms topTags = (ParsedStringTerms) aggs.get("name");
注意EmptyPage.INSTANCE 与PageRequest.of(0,0) 相同,是实现此目的的自定义Impl。
不幸的是,它没有做我想做的事,因为它忽略了filter 子句,它返回了男性和女性的名字。
我怀疑withQuery 可能应该包含另一个Query,但我不知道如何将另一个NativeSearchQuery 传递给该方法。
我正在使用的版本:
- Spring Data Elasticsearch:4.0.3.RELEASE
- Elasticsearch 客户端:7.6.2
如何使用 spring-data-elasticsearch 编写上述 json 查询? 提前致谢。
【问题讨论】:
标签: elasticsearch spring-data spring-data-elasticsearch elasticsearch-aggregation