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

У меня есть приложение 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 запросами, но безуспешно. Любая подсказка с очень простым запросом elasticsearch будет оценена по достоинству.


person COil    schedule 16.11.2015    source источник


Ответы (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
        }
      ]
    }
  }
}
person Andrei Stefan    schedule 16.11.2015
comment
Я попробую сегодня. :) - person COil; 17.11.2015
comment
Работает хорошо, я возился, когда вкладывал свои запросы. Спасибо. - person COil; 17.11.2015
comment
Прохладно. Без проблем :-). - person Andrei Stefan; 17.11.2015