【发布时间】:2020-05-11 22:43:38
【问题描述】:
我有以下问题。我有一个带有 2 个属性(fieldB 和 fieldC)的嵌套字段(“列表”)。 文档如下所示:
"fieldA: "1",
"list": [
{"fieldB": "ABC",
"fieldC": "DEF"},
{"fieldB": "ABC",
"fieldC": "GHI"},
{"fieldB": "UVW",
"fieldC": "XYZ"},...]
},
我想获得所有文档中“ABC”(fieldB) 的所有可能 fieldC 值的不同列表。到目前为止,我已经在 Java(Java REST 客户端)中尝试过这个:
SearchRequest searchRequest = new SearchRequest("abc*");
QueryBuilder matchQueryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.nestedQuery("aList",
QueryBuilders.matchQuery("list.fieldB.keyword", "ABC"), ScoreMode.None));
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(matchQueryBuilder)
.aggregation(AggregationBuilders.nested("listAgg","list")
.subAggregation(AggregationBuilders.terms("fieldBAgg")
.field("list.fieldB.keyword")));
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = null;
try {
searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
Nested list = searchResponse.getAggregations().get("listAgg");
Terms fieldBs = list.getAggregations().get("fieldBAgg");
通过该查询,我获得了 fieldB 中包含“ABC”的所有文档,并获得了 all fieldC 值。但我只想要 fieldB 为“ABC”的 fieldC 值。
所以在那个例子中我得到了 DEF、GHI 和 XYZ。但我只想要 DEF 和 GHI。有人知道如何解决这个问题吗?
【问题讨论】:
标签: java elasticsearch