Ошибка запроса Elasticsearch на zip_code

#elasticsearch #elasticsearch-7

#эластичный поиск #elasticsearch-7

Вопрос:

У меня странное поведение в 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
            }
          }
        }
      }
    }
  }
}
 

У кого-нибудь есть какие-нибудь идеи, как меня разблокировать?

Спасибо

Ответ №1:

Это потому city_code , что имеет тип text и, таким образом, анализируется, следовательно, то, что индексируется, является 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"}}
      ]
    }
  }
}