elasticsearch用Java获取聚合

时间:2016-05-26 21:59:46

标签: java elasticsearch

如何在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();

这是我在调试时得到的响应 enter image description here

3 个答案:

答案 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版进行测试。