asticsearch: применение дополнительного буста к данному полю для данного значения

У меня есть приложение Symfony 2.7.6, использующее FOSElasticaBundle.

У меня есть 2 вида поиска:

  1. Один без ключевого слова, в этом случае применяются только фильтры, и все документы оцениваются в 1 (иногда в случайном порядке), в этом случае основной запрос:

    $query = new Elastica\Query\MatchAll();
    
  2. Один с ключевым словом, применяются те же фильтры, и при совпадении снова запускается список полей (одно с другим усилением). И результаты сохраняются по баллам. Основной запрос сейчас:

    $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 запросы, но без успеха. Любая подсказка с очень простым запросом эластичного поиска приветствуется.

1

Решение

Как насчет этого:

{
"query": {
"function_score": {
"query": {
"multi_match": {
"query": "blabla",
"operator": "AND",
"fields": [
"field1^30",
"field2",
"field3",
"field4",
"_all"]
}
},
"functions": [
{
"filter": {
"term": {
"field5": "some_value"}
},
"boost_factor": 15
}
]
}
}
}
1

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

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

По вопросам рекламы [email protected]