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

1

У меня есть приложение 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 - просто пример, мы проведем тесты, чтобы увидеть, какое дополнительное значение boost нужно выбрать). Используемое здесь значение не является ключевым словом, это еще один параметр,

Я пробовал с FunctionScore и с Boosting запросами, но безуспешно. Любые подсказки с очень простым запросом elasticsearch будут оценены.

Теги:
elasticsearch
foselasticabundle

1 ответ

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
        }
      ]
    }
  }
}
  • 0
    Я попробую сегодня. :)
  • 0
    Работает хорошо, я возился при вложении своих запросов. Благодарю.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню