【问题标题】:No matches when querying Elastic Search查询 Elastic Search 时没有匹配项
【发布时间】:2021-02-20 04:54:39
【问题描述】:

我正在尝试运行查询弹性搜索。运行此查询时

GET accounts/_search/
{
  "query": {
   "term": {
     "address_line_1": "1000"
   }
  }
}

我得到了多条记录,比如

    "hits" : [
      {
        "_index" : "accounts",
        "_type" : "_doc",
        "_id" : "...",
        "_score" : 8.355149,
        "_source" : {
          "state_id" : 35,
          "first_name" : "...",
          "last_name" : "...",
          "middle_name" : "P",
          "dob" : "...",
          "status" : "ACTIVE",
          "address_line_1" : "1000 BROADROCK CT",
          "address_line_2" : "",
          "address_city" : "PARMA",
          "address_zip" : "",
          "address_zip_plus_4" : ""
        }
      },

但是当我尝试扩展它以包含更多类似下面的内容时,我没有得到任何匹配项

GET accounts/_search/
{
  "query": {
   "term": {
     "address_line_1": "1000 B"
   }
  }
}

响应是

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

【问题讨论】:

    标签: elasticsearch kibana elastic-stack


    【解决方案1】:

    term 查询正在寻找完全匹配。您的 address_line_* 字段很可能已使用标准分析器进行索引,该分析器将所有字母小写,从而阻止查询匹配。

    所以要么使用

    GET accounts/_search/
    {
      "query": {
       "match": {                <--
         "address_line_1": "1000 B"
       }
      }
    }
    

    它并不真正“关心” B 是小写/大写或调整您的 field analyzers 以保留大写。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-13
    • 2015-07-13
    • 2021-02-17
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多