Я использую 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 (модель и имена полей изменены из-за очень специфической c модели предметной области).
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}