【问题标题】:Elasticsearch query on zip_code failed对 zip_code 的 Elasticsearch 查询失败
【发布时间】:2021-02-08 03:27:24
【问题描述】:

我在 elasticsearch 上有一个我无法解释的奇怪行为。

当我这样做时:

POST /ad_search/_search
{
  "query": {
    "match": {
      "city_code": "2A247"
    }
  }
}

我有多个结果。但是当我这样做时(此代码由库生成):

POST /ad_search/_search
{
  "from":0,
  "query": {
    "bool": {
      "must":[
        {"term":{"city_code":"2A247"}}
      ]
    }
  }
}

我没有结果。

当我搜索所有其他 zip_code 时,仅使用 71459 之类的数字。这两个查询都运行良好,并且给了我相同的结果。

我正在考虑一个映射问题,但似乎没问题:

GET /ad_search/_mapping
{
  "ad_search" : {
    "mappings" : {
      "properties" : {
        "city_code" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

有人有什么想法可以解锁我吗?

谢谢

【问题讨论】:

    标签: elasticsearch elasticsearch-7


    【解决方案1】:

    这是因为city_code 是文本类型,因此被分析,因此被索引的是2a247(小写)。

    因此,您可以使用 term 查询来查询 city_code.keyword,这会进行完全匹配

    POST /ad_search/_search
    {
      "from":0,
      "query": {
        "bool": {
          "must":[
            {"term":{"city_code.keyword":"2A247"}}
          ]
        }
      }
    }
    

    或者在 city_code 字段上进行匹配查询:

    POST /ad_search/_search
    {
      "from":0,
      "query": {
        "bool": {
          "must":[
            {"match":{"city_code":"2A247"}}
          ]
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多