如何在Java中获取查询的聚合?
这是我的疑问:
GET my_dataset/document/_search
{
"query": {
"match": {
"docId": "1"
}
},
"aggs": {
"text": {
"avg": {
"script": "doc['text'].values.size()"
}
}
}
}
这是我得到的输出
..
},
"aggregations": {
"text": {
"value": 32
}
}
如何获得32的值?我正在尝试以下但没有成功
response.getAggregations().getValue("text");
这是我用Java构建查询并获得响应的方法
XContentBuilder aggregationBuilder = XContentFactory.jsonBuilder();
aggregationBuilder.startObject()
.startObject("query")
.startObject("match")
.field("docId", docID)
.endObject()
.endObject()
.startObject("aggs")
.startObject("text")
.startObject("max")
.field("script", "doc['text'].values.size()")
.endObject()
.endObject()
.endObject()
.endObject();
SearchResponse response = client.prepareSearch("my_dataset").setTypes("document")
.setSource(aggregationBuilder)
.execute()
.actionGet();
答案 0 :(得分:1)
有效的解决方案是
response.getAggregations().get("text").getProperty("value")
必须使用getProperty(" value")而不是getValue()。
答案 1 :(得分:0)
你能试试吗
response.getAggregations().get("text").getValue();
答案 2 :(得分:0)
请参阅https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/_metrics_aggregations.html
示例:
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
...
Avg avg = searchResponse.getAggregations().get("text");
double value = avg.getValue();
使用2.3.3版进行测试。