因此,我已经能够使用elasticsearch高级restclient在Java中根据需要复制elasticsearch查询。问题是我无法检索我想要的值。在提供代码之前,我想解决总体目标,以防有更简单的解决方案(似乎这不必那么困难。)
总体目标:获取“推荐者”字段中每个唯一值“已访问”==true 的文档数量。
我当前的状态:我已经能够在 kibana/elasticsearch 中编写具有所需输出的查询,但是当我在 Java 中复制此查询时,我无法访问我需要的数据。(使用 searchRequest.source().toString 进行验证())。
这是查询:
{
"aggs":{
"recommenderIDs": {
"terms": {
"field": "recommender"
},
"aggs": {
"visit_stats": {
"filters": {
"filters": {
"visited": {
"match":{
"visited": true
}
}
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我的 java 代码中的内容:
// ...
SearchRequest searchRequest = new SearchRequest(INDEX_REC_RECOMMENDATIONS);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
String aggregationName = "recommenderId";
String filterName = "wasVisited";
TermsAggregationBuilder aggQuery = AggregationBuilders
.terms(aggregationName)
.field(RecommendationRepoFieldNames.RECOMMENDER);
AggregationBuilder aggFilters = AggregationBuilders.filters(
filterName,
new FiltersAggregator.KeyedFilter(
RecommendationRepoFieldNames.RECOMMENDER,
QueryBuilders.termQuery(RecommendationRepoFieldNames.VISITED, …Run Code Online (Sandbox Code Playgroud)