elasticsearch 在弹性搜索中,如何在单个布尔过滤器中包含术语和术语过滤器的组合?,elasticsearch,filter,elasticsearch,Filter" /> elasticsearch 在弹性搜索中,如何在单个布尔过滤器中包含术语和术语过滤器的组合?,elasticsearch,filter,elasticsearch,Filter" />

elasticsearch 在弹性搜索中,如何在单个布尔过滤器中包含术语和术语过滤器的组合?

elasticsearch 在弹性搜索中,如何在单个布尔过滤器中包含术语和术语过滤器的组合?,elasticsearch,filter,elasticsearch,Filter,我正在使用logstash在elasticsearch数据库中存储日志。我想获得具有特定severitylabel的日志,这些日志位于特定的时间戳和与特定消息的匹配之间。我编写的curl查询是: curl -XPOST 'localhost:9200/logstash-2015.06.19/_search/?pretty' -d '{ "query": { "filtered": { "query": { "bool": {

我正在使用logstash在elasticsearch数据库中存储日志。我想获得具有特定severitylabel的日志,这些日志位于特定的时间戳和与特定消息的匹配之间。我编写的curl查询是:

curl -XPOST 'localhost:9200/logstash-2015.06.19/_search/?pretty' -d '{
"query": {
    "filtered": {
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "@message": "session"
                        }
                    }
                ]
            }
        },
        "filter": {
            "bool": {
                "must": [
                    {
                        "range": {
                            "@timestamp": {
                                "gte": "2015-06-19T10:11:44.000Z",
                                "lte": "2015-06-19T11:11:44.000Z"
                            }
                        }
                    },
                    {
                        "term": {
                            "@app": "sparta"
                        }
                    },
                    {
                        "terms": {
                            "@severityLabel": [
                                "INFO",
                                "WARN",
                                "ERROR",
                                "FATAL",
                                "OFF"
                            ]
                        }
                    }
                ]
            }
        }
    }
} } '

它始终显示零个匹配的文档。我使用术语过滤器作为术语过滤器的同级,这是一个问题吗?

看起来不错。您确定存在“@message”、“@app”和“@severityLabel”字段吗?如果我没记错的话,logstash会将“@:char”附加到几个字段(比如timestamp),但不是所有字段……尝试减少查询并查看失败的地方。请注意,“查询”部分不需要布尔过滤器,但如果它停留在那里也不会有任何影响。@Roman我认为它只是“@severityLabel”,映射显示“@severityLabel”“.Link to my mapping:,而且我对elasticsearch有点陌生。我知道查询和过滤器之间的区别。我编写了与此等价的查询,它给了我命中率。但我想用过滤器而不是查询来实现。没有分数要求。链接到与筛选器等效的查询。请帮帮我,我被困在地狱里了。你什么意思?如果这是错误的,它不会执行将“@message”匹配到给定字符串(在本例中为“session”)的所需任务吗?或者bool过滤器只是多余的,并且有一些更短的方法来编写相同的查询?@NataniMayank我的意思是这两个bool查询没有链接。使用筛选查询时,查询和筛选部分由一个必需筛选器隐式连接。ElasticSearch将首先计算过滤器,然后计算缩减数据集上的查询。因此,在本例中可以消除第一个bool查询。