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