【发布时间】: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