Как я могу получить результат фильтра точного соответствия в Elastic Search

У меня есть одна проблема с эластичным поиском, я хочу найти точное совпадение в фильтрах. Например, если цветовой фильтр применяется только к «черному», эластичный поиск должен возвращать только «черные» продукты, а не другие продукты, в цвете которых есть ключевые слова черного цвета, такие как «черный серый». Я попробовал «match_phrase» вместо «match», но ничего не смог получить.

Пожалуйста, проверьте скриншот моей строки JSON: https://www.screencast.com/t/wjCcpfQwTxw

введите здесь описание изображения Заранее спасибо


person Techleads MobileDevs    schedule 19.08.2019    source источник
comment
Пожалуйста, покажите запросы, которые вы пробовали, а также сопоставление индекса, которое у вас есть в настоящее время.   -  person Val    schedule 19.08.2019
comment
Большое спасибо за ваш ответ, пожалуйста, проверьте вышеупомянутую строку JSON в формате.   -  person Techleads MobileDevs    schedule 19.08.2019
comment
Пожалуйста, не предоставляйте скриншоты, так как их сложно копировать/вставлять или искать. Также нужно ваше отображение индекса, пожалуйста, спасибо!   -  person Val    schedule 19.08.2019


Ответы (2)


Чтобы получить точное соответствие, введите ключевое слово в поле color. Вот пример с завитком. Протестировано с помощью Elasticsearch 7.3.

  1. Создать индекс

    curl -X PUT "localhost:9200/products?pretty" -H 'Content-Type: application/json' -d' {} '

  2. Определите сопоставление для цвета поля ключевого слова типа.

    curl -X PUT "localhost:9200/products/_mapping?pretty" -H 'Content-Type: application/json' -d' { "properties": { "color": { "type": "keyword" } } } '

  3. Добавьте два примера набора данных

    *curl -X PUT "localhost:9200/products/_doc/1?pretty" -H 'Тип содержимого: application/json' -d' { "color" : "синий зеленый" } '

    curl -X PUT "localhost:9200/products/_doc/2?pretty" -H 'Content-Type: application/json' -d' { "color" : "blue" } '*

  4. Протестируйте запрос.

    curl -X GET "localhost:9200/products/_search?pretty" -H 'Content-Type: application/json' -d' { "query": { "match": { "color": "blue" } } } '

person Foo Kernelpanic Bar    schedule 19.08.2019
comment
Добро пожаловать в СО. Пожалуйста, дайте также пример кода. Прямо сейчас ваш ответ больше похож на комментарий. - person Harshal Parekh; 20.08.2019
comment
Спасибо за ваш отзыв. Я добавил подробный пример того, как определить поле ключевого слова. - person Foo Kernelpanic Bar; 20.08.2019

person    schedule
comment
.keyword сделал всю работу за меня - person Diego Ponciano; 04.08.2020
comment
Мне не нравится добавлять .keyword в существующее поле, я не получаю результатов для запроса. Есть ли какая-то конфигурация, позволяющая использовать это неявное ключевое слово? Я обнаружил, что могу добавить .anything к имени поля в таком запросе, и API не выдаст ошибку. Он просто не возвращает никаких результатов. - person julianhatwell; 25.05.2021