Elasticsearch 查询 - 如何聚合时间戳并按术语过滤?
Elasticsearch Query - How to aggregate timestamps and filter by term?
我有一个有效的过滤器查询:
{
"filter": {
"and": [{
"range": {
"timestamp": {
"gte": "2015-05-07T12:04:30Z"
"lte": "2015-08-07T12:04:30Z"
}
}
}, {
"term": {
"in_context.course_id": "1234567"
}
}]
},
"fields": ["timestamp"]
}
其中 returns 最近三个月每个事件的时间戳。
但是返回了大约 100 万个时间戳,这使得响应太大,所以我想汇总结果并获得每天的文档总和。
我发现这个使用日期直方图的片段:
{
"aggs" : {
"histo1" : {
"date_histogram" : {
"field" : "timestamp",
"interval" : "day"
},
"aggs" : {
"price_stats" : {
"stats" : {
"field" : "price"
}
}
}
}
}
}
这正是我所需要的,但我不知道如何将它合并到我的原始查询中,并使用术语过滤器!非常乐意提供帮助!
您只需在查询的顶层添加 aggs
部分即可。请注意,我将您的 filter
包装到 filtered
查询中。
{
"size": 0,
"query": {
"filtered": {
"filter": {
"and": [
{
"range": {
"timestamp": {
"gte": "2015-05-07T12:04:30Z",
"lte": "2015-08-07T12:04:30Z"
}
}
},
{
"term": {
"in_context.course_id": "1234567"
}
}
]
}
}
},
"aggs": {
"histo1": {
"date_histogram": {
"field": "timestamp",
"interval": "day"
}
}
}
}
我有一个有效的过滤器查询:
{
"filter": {
"and": [{
"range": {
"timestamp": {
"gte": "2015-05-07T12:04:30Z"
"lte": "2015-08-07T12:04:30Z"
}
}
}, {
"term": {
"in_context.course_id": "1234567"
}
}]
},
"fields": ["timestamp"]
}
其中 returns 最近三个月每个事件的时间戳。 但是返回了大约 100 万个时间戳,这使得响应太大,所以我想汇总结果并获得每天的文档总和。
我发现这个使用日期直方图的片段:
{
"aggs" : {
"histo1" : {
"date_histogram" : {
"field" : "timestamp",
"interval" : "day"
},
"aggs" : {
"price_stats" : {
"stats" : {
"field" : "price"
}
}
}
}
}
}
这正是我所需要的,但我不知道如何将它合并到我的原始查询中,并使用术语过滤器!非常乐意提供帮助!
您只需在查询的顶层添加 aggs
部分即可。请注意,我将您的 filter
包装到 filtered
查询中。
{
"size": 0,
"query": {
"filtered": {
"filter": {
"and": [
{
"range": {
"timestamp": {
"gte": "2015-05-07T12:04:30Z",
"lte": "2015-08-07T12:04:30Z"
}
}
},
{
"term": {
"in_context.course_id": "1234567"
}
}
]
}
}
},
"aggs": {
"histo1": {
"date_histogram": {
"field": "timestamp",
"interval": "day"
}
}
}
}