如何根据日期范围找到一个字段的不同值?弹性搜索 6.3
How do I find distinct values of one field based on date range? Elasticsearch 6.3
我有一个字段 cid
,我需要找到它的不同值。
但我想要那些满足我的日期范围限制的 cid
。我的意思是,我想要在给定时间范围内添加到我的 Elasticsearch 数据库中的不同 cid
。
我尝试了很多方法,其中大多数只是 return 所有值而不聚合。
{
"aggs": {
"daterange": {
"range": {
"field": "@timestamp",
"ranges": [
{"from": "2019-05-02", "to": "2019-05-03"}
]
},
"aggs": {
"result": {
"terms": {
"field": "cid.keyword"
}
}
}
}
},
"_source":"cid"
}
我期望 cid
的不同值,但我得到的是符合时间范围的所有值。
更新:
将我的 URL 从 /index/search?size=100
更改为 /index/search
后,Val 的回答有效
您需要这样做,即添加日期 range
作为查询以减少文档集,然后 运行 terms
仅在文档上聚合属于该日期范围:
{
"size": 0,
"query": {
"range": {
"@timestamp": {
"gte": "2019-05-02",
"lt": "2019-05-03"
}
}
},
"aggs": {
"result": {
"terms": {
"field": "cid.keyword"
}
}
}
}
我有一个字段 cid
,我需要找到它的不同值。
但我想要那些满足我的日期范围限制的 cid
。我的意思是,我想要在给定时间范围内添加到我的 Elasticsearch 数据库中的不同 cid
。
我尝试了很多方法,其中大多数只是 return 所有值而不聚合。
{
"aggs": {
"daterange": {
"range": {
"field": "@timestamp",
"ranges": [
{"from": "2019-05-02", "to": "2019-05-03"}
]
},
"aggs": {
"result": {
"terms": {
"field": "cid.keyword"
}
}
}
}
},
"_source":"cid"
}
我期望 cid
的不同值,但我得到的是符合时间范围的所有值。
更新:
将我的 URL 从 /index/search?size=100
更改为 /index/search
您需要这样做,即添加日期 range
作为查询以减少文档集,然后 运行 terms
仅在文档上聚合属于该日期范围:
{
"size": 0,
"query": {
"range": {
"@timestamp": {
"gte": "2019-05-02",
"lt": "2019-05-03"
}
}
},
"aggs": {
"result": {
"terms": {
"field": "cid.keyword"
}
}
}
}