Я использую Searchkick в проекте Rails с сервером ElasticSearch 6.8. Я пытаюсь повысить некоторые документы, в которых есть поле года, равное этому году или году в будущем.
Я пробовал использовать boost_where
и совсем недавно boost_by
, но ни один из них не работает. boost_by
генерирует функцию function_score
, которая выдает ошибку в ElasticSearch. Вот моя последняя попытка.
Model.search('value', boost_by: { year: { scale: '5y' } })
ElasticSearch, похоже, не нравится интервал календаря (5y
), хотя он должен быть допустимым. Вот объект причины из ошибки:
"caused_by": {
"type": "number_format_exception",
"reason": "For input string: \"5y\""
}
Я пытался установить origin
и decay
вместе с scale
, но это, похоже, ничего не помогает.
Вот запрос, сгенерированный Searchkick (имена моделей и полей изменены из-за очень специфической модели предметной области).
Model Search (163.5ms) model_development/_search {"query":{"function_score":{"functions":[{"weight":1,"gauss":{"year":{"scale":"5y"}}}],"query":{"bool":{"should":[{"dis_max":{"queries":[{"multi_match":{"query":"Abreu","boost":10,"operator":"and","analyzer":"searchkick_search","fields":["*.analyzed"],"type":"best_fields"}},{"multi_match":{"query":"Abreu","boost":10,"operator":"and","analyzer":"searchkick_search2","fields":["*.analyzed"],"type":"best_fields"}},{"multi_match":{"query":"Abreu","boost":1,"operator":"and","analyzer":"searchkick_search","fuzziness":1,"prefix_length":0,"max_expansions":3,"fuzzy_transpositions":true,"fields":["*.analyzed"],"type":"best_fields"}},{"multi_match":{"query":"Abreu","boost":1,"operator":"and","analyzer":"searchkick_search2","fuzziness":1,"prefix_length":0,"max_expansions":3,"fuzzy_transpositions":true,"fields":["*.analyzed"],"type":"best_fields"}}]}}]}},"score_mode":"sum"}},"timeout":"11s","_source":false,"size":10000}