我正在尝试使用一个非常基本的过滤查询来使用Elasticsearch。我有一个logstash索引,它有多个网络流量日志条目。我试图根据HTTP请求类型 - GET进行过滤。这是我过滤的查询看起来像......
curl -XGET "http://<myhost>:9200/<myindex>/_search?pretty" -d '
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {"verb":"GET"}
}
}
}
}
}'
这似乎与语法中的文档匹配, http://www.elasticsearch.com/guide/en/elasticsearch/guide/current/_combining_queries_with_filters.html
但我得到0次点击。具有完全匹配语法的相同查询有效。我有成千上万的这样的消息,其中“动词”:“获取”
感谢任何帮助。
答案 0 :(得分:7)
如果您的verb
字段已使用默认分析器编入索引,则很可能最终将其编入索引为小写:“get”而不是“GET”,“delete”而不是“DELETE”。
term
过滤只会在您的查询中获取过滤后的值GET
,而不会对其进行分析(这就是它的工作原理)。因此,基本上,您在包含GET
,get
,delete
等的文档列表中寻找值post
。
如上所述,您实际上需要寻找较低的值:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {"verb":"get"}
}
} } } }