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