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