Хорошей отправной точкой, которая, вероятно, сработает, является умножение оценки на сублинейную функцию, которая (медленно) увеличивается с ростом популярности. Например,
newScore = score * log(1 + 0.5 * popularity)
Чтобы применить это повышение, вы должны использовать анализатор запросов Solr * и передать параметр повышения со следующим значением:
&boost=log(sum(1, product(0.5, popularity)))
где популярность - это название поля. Вам не нужно использовать параметр bf
, так как вы должны использовать мультипликативный буст, а не аддитивный.
Причиной добавления 1 является обработка случая, в котором popularity=0
(поэтому, если популярность каждого документа всегда равна по крайней мере 1, вам не нужно добавлять 1). Сила эффекта популярности может быть увеличена или уменьшена путем изменения коэффициента 0,5 на некоторое другое значение. Например, вы можете использовать коэффициент 2 для увеличения эффекта:
newScore = score * log(1 + 2 * popularity)
Хороший фактор, вероятно, равен 9 / m
, где m
- это то, что, как вы ожидаете, должно быть средней популярностью, поскольку в этом случае увеличение "медианного документа" (медиана в том смысле, что его популярность равна m
) будет равен 1 (то есть его оценка вообще не будет повышена).
Опять же, это только отправная точка, и вам придется опробовать различные функции повышения, пока не найдете ту, которая работает хорошо.