首页 > 解决方案 > 对 zip_code 的 Elasticsearch 查询失败

问题描述

我在 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
            }
          }
        }
      }
    }
  }
}

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

谢谢

标签: elasticsearchelasticsearch-7

解决方案


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

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

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"}}
      ]
    }
  }
}

推荐阅读