Это потому, что ваше поле name
имеет тип text
.
Когда тип данных, если text
, Elasticsearch разбивает значения (например, The George
или George Washington
на токены [the, george]
или [george, washington]
и сохраняет эти токены в инвертированном индексе. Следовательно, при поиске в этом поле с использованием Ваш запрос также вернет эти документы, если вы скажете, что они не совпадают.
Для точного соответствия я предлагаю вам использовать тип keyword
, используя нормализатор lowercase
, как указано в приведенном ниже отображении:
PUT <your_index_name>
{
"settings":{
"analysis":{
"normalizer":{
"my_custom_normalizer":{
"type":"custom",
"filter":[
"lowercase"
]
}
}
}
},
"mappings":{
"mydocs":{
"properties":{
"name":{
"type":"keyword",
"normalizer":"my_custom_normalizer"
}
}
}
}
}
При этом ваши значения будут сохранены, как, например, для основываясь на приведенном выше отображении, он преобразует The George
или George Washington
в the george
или george washtingon
и затем сохраняет их как есть в инвертированном индексе.
Возможно, вы упомянули, что указанный вами запрос работает тогда, как и ожидалось.
Надеюсь, это поможет!