Отображение влияет на то, как ваши данные хранятся и как вы можете запросить это поле. Поле вашей категории (с именем name ) настроено для автоматического заполнения, а не для поиска с точным соответствием. Поэтому вам необходимо изменить отображение, чтобы обеспечить точный поиск совпадений.
Однако вы можете сделать это, не меняя текущего поля, а просто добавив дополнительное поле, преобразовав свое поле в мультиполе. и добавление поля, которое поддерживает запросы с точным соответствием. Фрагмент сопоставления:
"name": {"type": "string", "analyzer": "autocomplete", "search_analyzer": "standard", "fields": {"raw": {"type "" string "," index ":" not_analyzed "}}}}
Примечание: Я заметил, что вы используете более старую версию Elasticsearch (тип" string "был заменен на типы «текст» (для полнотекстового поиска) и «ключевое слово» (для точного поиска совпадений). Я попытался придумать сопоставление, которое работает со старыми версиями Elasticsearch, и надеюсь, что оно работает. Если нет, вам нужно предоставить версия Elasticsearch, которую вы используете.
После исправления сопоставления вам необходимо убедиться, что поле также заполнено. Это можно сделать, переиндексировав все данные, выполнив следующий запрос:
POST <your_index_name>/_update_by_query
В вашем запросе вам необходимо выполнить следующий поиск (для точного соответствия):
"match": {
"category.name.raw": "Arts and Culture"
}
Для частичного поиска вы продолжите использовать поле category.name
(без суффикса *). 1020 * * 1021 сырец *)