2014-11-08 111 views
3

我想要获得一个非常基本的过滤查询来使用Elasticsearch。我有一个logstash索引,其中有多个网络流量日志条目。我正在尝试基于HTTP请求类型进行过滤 - GET。以下是我过滤查询看起来像......Elasticsearch过滤的查询不起作用

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命中。具有完全匹配语法的相同查询有效。我有成千上万的这样的消息,其中“动词”:“GET”

任何帮助表示赞赏。

回答

6

如果您的verb字段已使用默认分析器进行索引,那么很可能最终会被索引为小写:“get”而不是“GET”,“delete”而不是“DELETE”。

term过滤仅在您的查询中获取过滤值GET,并且它不会分析它(这是它的工作原理)。所以,基本上,你是在包含文件清单寻找价值GETgetdeletepost

这些虽这么说,你实际上需要去寻找小写值:

{ 
    "query": { 
     "filtered": { 
      "query": { 
       "match_all": {}  
      }, 
      "filter": { 
       "term": {"verb":"get"} 
      } 
     } } } } 
+0

感谢安德烈。是的,就是这样。这很奇怪......但正如你所说,它是如何工作的。叹气! – theHawkeye 2014-11-08 19:39:07

+0

这并不奇怪,这是分析与否以及使用术语的匹配查询之间的区别。这可能不是你的期望,但我不认为这很奇怪。 – 2014-11-08 23:04:36

+0

ES的默认分析仪实际上将其分为全部小写的标记:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html – sami 2017-12-05 07:57:10