Как можно комбинировать скор эластика, который говорит о соотношении запрос-товар и
фактор рекоммендаций, то есть соотношение товар - пользователь?
Например, я хочу их суммировать, но надо учеть их масштабы и не просто нормализовать, а стандартизировать, по - хорошему.
Что я придумала, например сделать два запроса вместо одного: сначала с аггрегировать по этому запросу средний скор и его отклонение, а потом для всех документов из этого запроса выполнить function_SCORE где
_score - agg_score_avg/agg_score_square + recom_factore.
Я не очень понимаю, что это вам даст. Допустим, у вас два записи и у первой записи _score + recom_factore == a а у второй _score + recom_factore == b. Если a > b то a - c > b - c для любого c. То есть, вычитая одну и туже константуaggscore_avg/agg_score_square из всех _score вы порядок записей никак не поменяете, а само по себе значение _score бесполезно.
Существует рекомендательная система, которая считает скоры документа для групп юзеров, а также есть эластик который читает скор документа для запроса.
Recom_factore не константный, а для каждого документа свой, посчитанный заранее , и самое просто использовать его в function_score.
Если их просто даже складывать как числа, надо привести к одной шкале, нормализовать. Но если складывать их как случайные величины, то надо стандартизовать.
Полагаю это неоптимальный метод, но коллеги спрашивают меня, как стандартизовать _score?
А вы предполагаете, что _score имеет нормальное, равномерное, гамма или какое-то другое распределение? И почему имеет смысл их складывать, а не, скажем, умножать? На самом деле, это сложная проблема и у меня готового решения нет - многое зависит от интерпретации самого _score и recom_factore. Я бы начал с изучения опыта wikimedia и wordpress - https://greg.blog/2017/04/25/combining-search-scores/
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.