Точные совпадения в Elasticsearch (Фасетный поиск)

Я планирую превратить мои поисковые и фильтрующие системы в Elasticsearch. Изучив много документации, я обнаружил, что у эластичного поиска есть возможность создавать фасеты. Я добавил некоторые аспекты в боковую панель навигации левого фильтра и запросил мои продукты и аспекты, отфильтровав их с помощью поля категории вasticsearch.

Но дело в том, что я не знаю, как запросить обратно вasticsearch для выбранных аспектов.

я использовал

'filter' => [
'bool' => [
'must' => [
['match_phrase' => [ 'Material' => 'Aluminum' ]],
['match_phrase' => [ 'Length' => '1/2']]
]
]
]

этот код в теге тела клиента эластичного поиска php. Это на самом деле работает, но у меня есть другие продукты, которые имеют длину 1 / 2-3 или 1 / 2-4. Когда я запрашивал 1/2, Elastic также получает 1 / 2-3 и 1 / 2-4, потому что «1 / 2-3» и «1 / 2-4» содержат также «1/2».

Интересно, как искать и получать именно те продукты, которые имеют 1/2, а не 1 / 2-3 или 1 / 2-4, какой запрос мне следует использовать именно?

Спасибо!

Примечание: аспекты не рекомендуется, я знаю. Я использую это слово, потому что я привык к нему. Это теперь агрегаты в Elasticsearch 2.3. и я использую эту версию. *

0

Решение

Получил мое решение!

Вместо match_phrase я использовал термин метод. Он получает именно то, что мне нужно. Он ищет точное совпадение, не содержащее совпадения, вместо match_phrase. Match_phrase ищет точную фразу рядом.

Но для термина вам нужно создать поля с not_analyzed для точного результата.

0

Другие решения

Других решений пока нет …