2014-11-08 142 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