Iam尝试使用过滤器从elasticsearch收集结果。当我添加过滤器时,我得到意想不到的结果。 (我希望看到的结果只与术语“例外”或“错误”相匹配)。
也许我把过滤器放在了错误的地方?
{
"query": {
"bool": {
"should": [
{
"match": {
"message": "error"
}
},
{
"match": {
"message": "exception"
}
}
],
"must_not": {
"match": {
"message": "io.vertx.spi.cluster.zookeeper.ZookeeperClusterManager"
}
},
"filter": [
{
"range": {
"@timestamp": {
"gt": "now-1000m"
}
}
}
]
}
}
}
答案 0 :(得分:0)
问题出在你应该的问题上。
<强>应强>
子句(查询)应出现在匹配的文档中。如果bool查询在查询上下文中并且具有must或filter子句,则文档将匹配bool查询,即使这些查询都不匹配。在这种情况下,这些条款仅用于影响分数。如果bool查询是过滤器上下文或既没有必须或过滤,那么至少有一个should查询必须匹配文档才能匹配bool查询。可以通过设置minimum_should_match参数
来明确控制此行为