Я знаю, что elasticsearch учитывает длину поля при вычислении оценки документов, полученных запросом. Чем короче поле, тем выше вес (см. The field-length norm).Как я могу увеличить норму длины поля в счете функции elasticsearch?
Мне нравится это поведение: когда я ищу iphone
Меня больше интересует iphone 6
, чем в Crappy accessories for: iphone 5 iphone 5s iphone 6
.
Теперь я хотел бы попытаться увеличить этот материал, допустим, я хочу удвоить его значение.
Я знаю, что можно изменить оценку, используя function score, и я думаю, что я смогу достичь того, что хочу, через script score.
Я попытался добавить еще одно поле длины норму в счет, как это:
{
"query": {
"function_score": {
"boost_mode": "replace",
"query": {...},
"script_score": {
"script": "_score + norm(doc)"
}
}
}
}
Но мне не удалось плохо, получаю эту ошибку: [No parser for element [function_score]]
EDIT:
Моя первая ошибка была что я не завернул счет функции в «запросе». Теперь я редактировал код выше. Моя новая ошибка говорит
GroovyScriptExecutionException[MissingMethodException
[No signature of method: Script5.norm() is applicable for argument types:
(org.elasticsearch.search.lookup.DocLookup) values:
[<[email protected]>]
Possible solutions: notify(), wait(), run(), run(), dump(), any()]]
EDIT: Я предоставил первый ответ, но я надеюсь на лучшее один