【发布时间】:2018-05-24 07:16:46
【问题描述】:
我有一个关于组合嵌套日期字段、date_histogram 聚合和范围查询的问题。
我的整个查询如下所示:
{
"query": {
"nested": {
"path": "transactions",
"query": {
"range": {
"transactions.date": {
"gte": "2013",
"lte": "2014",
"format": "yyyy"
}
}
}
}
},
"aggs" : {
"transactions": {
"nested": {
"path": "transactions"
},
"aggs": {
"count_per_year": {
"date_histogram": {
"field": "transactions.date",
"interval": "year"
}
}
}
}
}
}
给出以下响应(仅显示聚合):
"aggregations": {
"transactions": {
"doc_count": 23302,
"count_per_year": {
"buckets": [
{
"key_as_string": "2013-01-01T00:00:00.000Z",
"key": 1356998400000,
"doc_count": 181
},
{
"key_as_string": "2014-01-01T00:00:00.000Z",
"key": 1388534400000,
"doc_count": 8363
},
{
"key_as_string": "2015-01-01T00:00:00.000Z",
"key": 1420070400000,
"doc_count": 9621
},
{
"key_as_string": "2016-01-01T00:00:00.000Z",
"key": 1451606400000,
"doc_count": 5137
}
]
}
}
}
如您所见,我仍然得到指定范围之外的日期值。更奇怪的是,如果我删除查询部分,我会得到以下响应:
"aggregations": {
"transactions": {
"doc_count": 65485,
"count_per_year": {
"buckets": [
{
"key_as_string": "2013-01-01T00:00:00.000Z",
"key": 1356998400000,
"doc_count": 181
},
{
"key_as_string": "2014-01-01T00:00:00.000Z",
"key": 1388534400000,
"doc_count": 23009
},
{
"key_as_string": "2015-01-01T00:00:00.000Z",
"key": 1420070400000,
"doc_count": 27017
},
{
"key_as_string": "2016-01-01T00:00:00.000Z",
"key": 1451606400000,
"doc_count": 15278
}
]
}
}
}
如您所见,所有存储桶(与范围对应的存储桶除外)的 doc_count 都增加了,这意味着过滤掉了一些值,但不是全部。我检查了映射,transactions.date 是“日期”类型,这也得到了 date_histogram 聚合能够将所有事务放入存储桶的事实的证实。知道我可能做错了什么吗?
我目前正在运行 Elasticsearch 5.6.3。
【问题讨论】:
标签: elasticsearch elasticsearch-5