无法在 Elasticsearch 中执行聚合
Not able to Perform Aggregation in Elasticsearch
我是 Elasticsearch 的新手,一直在使用它的高级 Rest 客户端来执行日期范围的聚合。当我 运行 代码时,查询成功执行但返回的对象具有 null 作为聚合值:
这就是我正在尝试的方式:
AggregationBuilder aggregation =
AggregationBuilders
.dateRange("agg")
.field("date_created")
.format("MM")
.addRange(11, 12) // from 11 to 12 (excluded)
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.types(Long.toString(1234));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder
.query(QueryBuilders.matchAllQuery())
.aggregation(aggregation);
SearchResponse searchResponse = this.client.search(searchRequest);
searchResponse 对象的聚合为空值。
但是当我在 Kibana 中 运行 聚合查询时,这就是我得到的
POST /index_name/1234/_search?size=0
{
"aggs": {
"range": {
"date_range": {
"field": "date_created",
"format": "MM",
"ranges": [
{ "from": "now-0M/M" }
]
}
}
}
}
输出:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0,
"hits": []
},
"aggregations": {
"range": {
"buckets": [
{
"key": "11-*",
"from": 1509494400000,
"from_as_string": "11",
"doc_count": 2
}
]
}
}
}
有人可以帮我解决这个问题吗?我有点卡住了很长时间。
根据要求添加示例数据:
"hits": [
{
"_index": "index_name",
"_type": "1234",
"_id": "AV__ZmN6KNpjod2Y_7PE",
"_score": 1,
"_source": {
"category": 1234,
"i_id": 87665,
"v_Id": 12,
"date_created": "2017-11-27T14:33:38.954Z"
}
},
{
"_index": "index_name",
"_type": "1234",
"_id": "AV_-XzlpzSX1UeitwVjd",
"_score": 1,
"_source": {
"category": 1234,
"i_id": 8766,
"v_Id": 2,
"date_created": "2017-11-27T09:46:00.095Z"
}
}
]
谢谢!
终于,我找到了问题的答案。创建聚合对象后,我们必须手动将其设置为 SearchRequest。
AggregationBuilder aggregation =
AggregationBuilders
.dateRange("agg")
.field("date_created")
.format("yyyy-MM")
.addRange("2017-11", "2017-12") // from 11 to 12 (excluded)
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.types(Long.toString(1234));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder
.aggregation(aggregation);
添加行来修复代码:
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = this.client.search(searchRequest);
我是 Elasticsearch 的新手,一直在使用它的高级 Rest 客户端来执行日期范围的聚合。当我 运行 代码时,查询成功执行但返回的对象具有 null 作为聚合值:
这就是我正在尝试的方式:
AggregationBuilder aggregation =
AggregationBuilders
.dateRange("agg")
.field("date_created")
.format("MM")
.addRange(11, 12) // from 11 to 12 (excluded)
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.types(Long.toString(1234));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder
.query(QueryBuilders.matchAllQuery())
.aggregation(aggregation);
SearchResponse searchResponse = this.client.search(searchRequest);
searchResponse 对象的聚合为空值。
但是当我在 Kibana 中 运行 聚合查询时,这就是我得到的
POST /index_name/1234/_search?size=0
{
"aggs": {
"range": {
"date_range": {
"field": "date_created",
"format": "MM",
"ranges": [
{ "from": "now-0M/M" }
]
}
}
}
}
输出:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0,
"hits": []
},
"aggregations": {
"range": {
"buckets": [
{
"key": "11-*",
"from": 1509494400000,
"from_as_string": "11",
"doc_count": 2
}
]
}
}
}
有人可以帮我解决这个问题吗?我有点卡住了很长时间。
根据要求添加示例数据:
"hits": [
{
"_index": "index_name",
"_type": "1234",
"_id": "AV__ZmN6KNpjod2Y_7PE",
"_score": 1,
"_source": {
"category": 1234,
"i_id": 87665,
"v_Id": 12,
"date_created": "2017-11-27T14:33:38.954Z"
}
},
{
"_index": "index_name",
"_type": "1234",
"_id": "AV_-XzlpzSX1UeitwVjd",
"_score": 1,
"_source": {
"category": 1234,
"i_id": 8766,
"v_Id": 2,
"date_created": "2017-11-27T09:46:00.095Z"
}
}
]
谢谢!
终于,我找到了问题的答案。创建聚合对象后,我们必须手动将其设置为 SearchRequest。
AggregationBuilder aggregation =
AggregationBuilders
.dateRange("agg")
.field("date_created")
.format("yyyy-MM")
.addRange("2017-11", "2017-12") // from 11 to 12 (excluded)
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.types(Long.toString(1234));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder
.aggregation(aggregation);
添加行来修复代码:
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = this.client.search(searchRequest);