У меня есть приложение 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 - просто пример, мы проведем тесты, чтобы увидеть, какое дополнительное значение boost нужно выбрать). Используемое здесь значение не является ключевым словом, это еще один параметр,
Я пробовал с FunctionScore
и с Boosting
запросами, но безуспешно. Любые подсказки с очень простым запросом elasticsearch будут оценены.
Как насчет этого:
{
"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
}
]
}
}
}