[英]elasticsearch Get aggregations in Java
如何在 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();
有效的解决方案是
response.getAggregations().get("text").getProperty("value")
必须使用 getProperty("value") 而不是 getValue()。
你能试一下吗
response.getAggregations().get("text").getValue();
请参阅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 测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.