繁体   English   中英

elasticsearch 在 Java 中获取聚合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM