【问题标题】:Elastic search java api 1.3 aggreagation - bucket size always zeroElasticsearch java api 1.3聚合 - 存储桶大小始终为零
【发布时间】:2014-10-11 16:31:54
【问题描述】:

我在这里尝试使用弹性搜索 java 客户端。我尝试使用莎士比亚示例数据运行以下代码

final Client client = new TransportClient()
    .addTransportAddress(new InetSocketTransportAddress("localhost", 9300));

final SearchRequestBuilder searchRequestBuilder = client.prepareSearch("shakespeare")
    .setTypes("line")
    .setSource("{\n" +
            "  \"size\": 5,\n" +
            "  \"aggs\": {\n" +
            "    \"group_by_state\": {\n" +
            "      \"terms\": {\n" +
            "        \"field\": \"state\"\n" +
            "      },\n" +
            "      \"aggs\": {\n" +
            "        \"average_balance\": {\n" +
            "          \"avg\": {\n" +
            "            \"field\": \"balance\"\n" +
            "          }\n" +
            "        }\n" +
            "      }\n" +
            "    }\n" +
            "  }\n" +
            "}");

searchRequestBuilder.
    execute(new ActionListener<SearchResponse>() {
        public void onResponse(SearchResponse searchResponse) {
            final Terms terms = searchResponse.getAggregations().get("group_by_state");
            System.out.println(terms.getBuckets().size());
            client.close();
        }
        public void onFailure(Throwable throwable) {
            client.close();
        }
    });

我得到的结果是

    !!skipped initial part!! 
    }, {
      "_index" : "shakespeare",
      "_type" : "line",
      "_id" : "92972",
      "_score" : 1.0,
      "_source":{"line_id":92973,"play_name":"The Tempest","speech_number":4,"line_number":"3.3.17","speaker":"SEBASTIAN","text_entry":"Will we take throughly."}
    } ]
  },
  "aggregations" : {
    "group_by_state" : {
      "buckets" : [ ]
    }
  }
}     

但是如果我在命令行中运行相同的查询

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "size": 5,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state"
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}'        

结果——

"aggregations" : {
"group_by_state" : {
  "buckets" : [ {
    "key" : "al",
    "doc_count" : 21,
    "average_balance" : {
      "value" : 25377.571428571428
    }
  }, {
    "key" : "tx",
    "doc_count" : 17,
    "average_balance" : {
!!SKIPPING!!

我不确定问题是什么。我也尝试查看测试用例here,但没有运气。

【问题讨论】:

    标签: java elasticsearch size aggregation bucket


    【解决方案1】:

    我认为您正在查看的索引是错误的(使用 java api),

    你的 java api 是这样的

    final SearchRequestBuilder searchRequestBuilder = client.prepareSearch("shakespeare")
        .setTypes("line")
        .setSource("{\n" +
    

    curl 请求就像

    curl -XPOST 'localhost:9200/bank/_search?pretty' -d'

    那么,在 java api 中搜索 shakespeare,在 curl 中搜索 bank,然后 ??

    或者,一切都好!!

    【讨论】:

    • 在我没有重新检查代码的情况下提出这样一个愚蠢的问题,这完全是一个错误。非常感谢。
    猜你喜欢
    • 2017-09-22
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2014-07-01
    相关资源
    最近更新 更多