У меня есть приложение Symfony 2.7.6, использующее FOSElasticaBundle.
У меня есть 2 типа поиска:
Один без ключевого слова, в этом случае применяются только фильтры и все документы оцениваются 1 (иногда в случайном порядке), в этом случае основной запрос:
$query = new Elastica\Query\MatchAll();
Один с ключевым словом, применяются те же фильтры, и совпадение снова запускается по списку полей (одно с другим усилением). И результаты сохраняются по счету. Теперь основной запрос:
$match = new Elastica\Query\MultiMatch(); $match->setQuery($keyword); $match->setOperator('AND'); $match->setFields([ 'field1^30', 'field2', 'field3', 'field4', '_all' ]);
Те 2 поиска работают хорошо.
Теперь для обоих поисков я хочу, чтобы для заданного значения поля применялось динамическое усиление. Скажем: if field5 == 'value' then add boost 15
, (15 — это просто пример, мы сделаем тесты, чтобы увидеть, какое дополнительное значение усиления нужно выбрать) значение, используемое здесь, не является ключевым словом, это другой параметр.
Я пробовал с FunctionScore
и с Boosting
запросами, но безуспешно. Любая подсказка с очень простым запросом elasticsearch будет оценена по достоинству.