【问题标题】:Elasticsearch filtered query not workingElasticsearch 过滤查询不起作用
【发布时间】:2015-01-05 07:10:54
【问题描述】:

我正在尝试让一个非常基本的过滤查询与 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 次点击。具有完全匹配语法的相同查询有效。我有成千上万条这样的消息,其中 "verb":"GET"

感谢任何帮助。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

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

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

    话虽如此,您实际上需要寻找小写的值:

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

    【讨论】:

    • 谢谢安德烈。是的,就是这样。这很奇怪......但正如你所说,它是如何工作的。叹息!!
    • 这并不奇怪,这就是分析与否与使用一个词的匹配查询的区别。这可能不是你所期望的,但我认为这并不奇怪。
    • ES 的默认分析器实际上将其分解为全部小写的标记:elastic.co/guide/en/elasticsearch/reference/current/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 2013-07-06
    • 2017-02-11
    • 2017-07-08
    • 2014-10-10
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多