【问题标题】:Elastic search (DSL): term does not match anything弹性搜索 (DSL):术语不匹配任何内容
【发布时间】:2016-12-21 08:34:25
【问题描述】:

我是 ES 新手,我想做一个简单的查询来获取域的所有匹配值,但它不返回任何东西。 match_all 查询返回:

curl -XGET localhost:9200/zone/20161201/_search -d '{"query": { "match_all": { }}}'

{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":8,"max_score":1.0,"hits":[{"_index":"zone","_type":"20161201","_id":"AVkZ3-ic6lL49IXWU8TZ","_score":1.0,"_source":{"name":"domain2.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ3-ic6lL49IXWU8Ta","_score":1.0,"_source":{"name":"domain3.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ4AAQ6lL49IXWU8Te","_score":1.0,"_source":{"name":"domain3.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ3-ic6lL49IXWU8Tb","_score":1.0,"_source":{"name":"domain4.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ4AAQ6lL49IXWU8Tc","_score":1.0,"_source":{"name":"domain1.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ4AAQ6lL49IXWU8Td","_score":1.0,"_source":{"name":"domain2.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ4AAQ6lL49IXWU8Tf","_score":1.0,"_source":{"name":"domain4.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ3-ic6lL49IXWU8TY","_score":1.0,"_source":{"name":"domain1.com"}}]}}

但是当我想搜索一个特定的值时,它什么也找不到:

curl -XGET localhost:9200/zone/20161201/_search -d '{"query":{"term":{"name":"domain3.com"}}}'

你能帮帮我吗?这有什么问题?

【问题讨论】:

    标签: elasticsearch dsl


    【解决方案1】:

    由于我还不能添加 cmets,我需要创建一个完整的答案来帮助你。

    您的类型的映射是什么?术语查询用于未分析的字段并且只返回完全匹配。

    请查看文档以获取更多详细信息。特别是在“为什么术语查询与我的文档不匹配?”部分

    https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-term-query.html

    【讨论】:

      【解决方案2】:

      尝试下一个查询:

      GET zone/20161201/_search
      {
         "query": {
            "match": {
               "name": "domain3.com"
            }
         }
      }
      

      它会起作用的。 现在尝试下一个索引和查询:

      POST zone/20161201/
      {
        "name":"domain.com"
      }
      

      注意我们索引域,没有数字。

      然后试试你的查询:

      GET zone/20161201/_search
      {
          "query": {
            "term": {
               "name": "domain.com"
            }
         }
      } 
      

      这个查询也有效。

      当您使用“domain3”之类的字符串索引字符串时,将其弹性索引为 [domain,3](默认分析器),然后如果您使用术语查询,弹性查看确切的术语,因此他查看“domain3”但是未找到,因为弹性索引它作为域和 3。 所以使用匹配查询的更好方法。如果您确切知道自己在做什么,则可以使用术语查询。

      【讨论】:

        猜你喜欢
        • 2014-06-02
        • 2015-06-23
        • 2014-11-18
        • 1970-01-01
        • 2014-08-18
        • 2014-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多