Только сел за реализацию. Получилось примерно следующее:
{
"query": {
"dis_max": {
"queries": [
{
"function_score": {
"query": {
"match_phrase": {
"name.original": {
"query": "query"
}
}
},
"boost_mode": "replace",
"script_score": {
"script": {
"source": "200000 + _score"
}
}
}
},
{
"function_score": {
"query": {
"match_phrase_prefix": {
"name.original": {
"query": "query",
"max_expansions": 20
}
}
},
"boost_mode": "replace",
"script_score": {
"script": {
"source": "100000 + _score"
}
}
}
}
]
}
}
}
В таком варианте score берется только из скрипта.
Если boost_mode оставить по-дефотлу, то score в сочетании boost в подзапроса match_phrase_prefix спокойно перебивает score в match_phrase (В моём случа там получаются миллионы).
И то, остается вопрос какую дельту закладывать в этом случае, т.к. все равно результат зависит от данных. Насколько я понимаю, минимум логарифм от общего количества документов в степени количества префиксов. (Но это не точно
)
В идеале, получить бы max_score в подзапросе, чтобы можно было маштабировать итоговый score значение точно от "A" до "B" и/или иметь возможность настраивать вычисление score для match_phrase_prefix