Elasticsearch筛选查询不起作用

时间:2014-11-08 16:03:21

标签: elasticsearch

我正在尝试使用一个非常基本的过滤查询来使用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次点击。具有完全匹配语法的相同查询有效。我有成千上万的这样的消息,其中“动词”:“获取”

感谢任何帮助。

1 个答案:

答案 0 :(得分:7)

如果您的verb字段已使用默认分析器编入索引,则很可能最终将其编入索引为小写:“get”而不是“GET”,“delete”而不是“DELETE”。

term过滤只会在您的查询中获取过滤后的值GET,而不会对其进行分析(这就是它的工作原理)。因此,基本上,您在包含GETgetdelete等的文档列表中寻找值post

如上所述,您实际上需要寻找较低的值:

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