Для функции поиска в интернет-магазине я использую elasticsearchDSL от ongr (git / документы).
Базовая настройка для поиска названий продуктов:
$boolQuery = new BoolQuery();
$boolQuery->addParameter('minimum_should_match', 1);
$wcQuery = new WildcardQuery('name', "*$_term*");
$boolQuery->add($wcQuery, BoolQuery::MUST);
Это раздражает поведение:
Запрос «ноутбук» находит все продукты с этим термином. А вот запрос "записная книжка" вообще ничего не находит.
Возможно, запрос с подстановочными знаками в любом случае не является лучшей практикой.
Что мне нужно:
- поиск по нескольким полям (название, описание, производитель)
- никакой нечеткости: найти все условия поиска в любом из этих полей
Как лучше всего это сделать?
Я пробовал MultiMatchQuery
с комбинацией типов best_fields
и phrase_prefix
и SHOULD/MUST
, но в результате либо слишком много нерелевантных результатов, либо вообще нет.
Спасибо за ваше время.