【发布时间】:2014-07-11 12:28:29
【问题描述】:
如何在 elasticsearch 中使用与聚合相关的过滤器?
官方文档只给出了filter 和aggregations 的简单示例,并且没有对查询 dsl 的正式描述 - 比较它,例如postgres documentation。
通过尝试,我发现以下查询被 elasticsearch 接受(没有解析错误),但忽略了给定的过滤器:
{
"filter": {
"and": [
{
"term": {
"_type": "logs"
}
},
{
"term": {
"dc": "eu-west-12"
}
},
{
"term": {
"status": "204"
}
},
{
"range": {
"@timestamp": {
"from": 1398169707,
"to": 1400761707
}
}
}
]
},
"size": 0,
"aggs": {
"time_histo": {
"date_histogram": {
"field": "@timestamp",
"interval": "1h"
},
"aggs": {
"name": {
"percentiles": {
"field": "upstream_response_time",
"percents": [
98.0
]
}
}
}
}
}
}
有些人建议使用query 而不是filter。但官方文档一般推荐the opposite 用于过滤精确值。 query 的另一个问题:虽然过滤器提供 and,但 query 没有。
谁能指出我的文档、博客或书籍,它们描述了编写非平凡的查询:至少是一个聚合加上多个过滤器。
【问题讨论】:
标签: elasticsearch