Более сильное повышение по дате в Solr

Поле увеличения по дате в solr определяется как:

{!boost b=recip(ms(NOW,datefield),3.16e-11,1,1)}

Я посмотрел везде (примеры: Solr Dismax Config для ускоренной оценки и Solr boost для многозначного поля даты, и все они ссылаются на SolrRelevancyFAQ), то же определение используется. Но я обнаружил, что это недостаточно повышает мои результаты. Как я могу сделать эту дату бустинг сильнее?

Пользователь ищет два ключевых слова. Оба элемента содержат оба ключевых слова (в том же порядке) как в заголовке, так и в описании. Ни одно из ключевых слов не повторяется.

И вывод отладочной информации solr слишком сложен для понимания проблемы.

Теперь это не огромная проблема. 99% запросов работают нормально и дают ожидаемые результаты, так что это не так, как solr вообще не работает, я просто нашел эту ситуацию, которая меня очень смущает, и я не знаю, как действовать дальше.

3 ответа

Решение

Пользователь ищет два ключевых слова. Оба элемента содержат оба ключевых слова (в том же порядке) как в заголовке, так и в описании. Ни одно из ключевых слов не повторяется.

Ну, по вашему примеру, ясно, что ваши результаты оказались в tie ситуация. Чтобы понять эту проблему путаницы вывода отладки и разработать политику тай-брейка, важно понять, dismax,

С DisMax запросы, различные условия ввода пользователя выполняются для разных полей, если многие из них попадут (термин появляется в разных полях в одном и том же document) используется попадание с более высоким баллом, но что происходит с другими вложенными запросами, document на срок? Ну вот что tie параметр определяет. DisMax рассчитает оценку для запроса термина как:

score= [score of the top scoring subquery] + tie * (sum of other hitting subqueries)

Как следствие, tie Параметр представляет собой значение от 0 до 1, которое определяет, является ли Dismax будет учитывать только максимальный удар score на срок tie =0), все обращения за срок (настройка tie =1) или что-то среднее между этими двумя крайностями.

boost Параметр очень похож на bf параметр, но вместо добавления его результата к итоговой оценке, он умножит его. Это доступно только в расширенном анализаторе запросов Dismax или в анализаторе запросов Lucid.

Есть интересная статья Сравнение методов повышения SOLR, которая может быть полезна для вас.

Ссылки на этот ответ:

Шишир

rec (x, m, a, b) реализует f(x) = a/(xm+b) с:

  • x: возраст документа в мс, определенный как ms(NOW,<datefield>),

  • m: константа, определяющая масштаб времени, который используется для повышения. Это должно быть относительно того, что вы считаете старым возрастом документа (reference_time) в миллисекундах. Например, выбор reference_time на 1 год (3.16e10ms) подразумевает использование его обратного: 3.16e-11 (1/3.16e10 округлено).

  • a а также b являются константами (определены произвольно).

  • xm = 1 когда документ имеет значение 1 reference_time old (множитель = a/(1+b)).
    xm ≈ 0 когда документ новый, в результате чего значение близко к a/b,

  • Использование одного и того же значения для a и b гарантирует, что множитель не превысит 1 в последних документах.

  • С a = b = 1, старый документ 1 reference_time имеет множитель около 1/2, старый документ 1 reference_time имеет множитель около 1/3 и так далее.

Как сделать дату бустинга сильнее?

  • Увеличение m: выберите более низкое reference_time, например, 6 месяцев, что дает нам m = 6.33e-11, По сравнению со ссылкой на 1 год множитель уменьшается в 2 раза быстрее с увеличением возраста документа.

  • убывающий a а также b расширяет кривую отклика функции. Это может быть очень агрессивным. Пример здесь (стр. 8)

  • Применить усиление к самой функции усиления с помощью bf параметр, использующий анализатор запросов dismax или edismax: bf=recip(ms(NOW,datefield),3.16e-11,1,1)^2.0

Обратите внимание, что bf ведет себя как аддитивное повышение: оно действует как бонус, добавляемый к более новой оценке документа, тогда как {!boost b} действует больше как штраф, применяемый к оценке более старого документа. В любом случае, использование аддитивного ускорения может быть хорошим способом повысить эффективность новых документов. Просто помните, что показатель bf не зависит от общего показателя (релевантности), а это означает, что на релевантный набор результатов (с более высокими показателями) может повлиять не столько, сколько на релевантный набор результатов (с более низкими показателями), поэтому в зависимости от ваших потребностей он может быть интересным

В функции ReciprocalFloatFunction очень хорошо представлен пример, который даст вам четкое представление о том, как работает рецепт повышения. Если вы найдете это dismax не дает вам достаточного контроля над бустингом, вам придется немного повозиться с BoostQParserPlugin,

Множитель 3,16e-11 меняет единицы измерения с миллисекунд на годы (так как в год это около 3,16e10 миллисекунд). Таким образом, очень недавняя дата даст значение, близкое к 1/(0+1) или 1, дата в прошлом году получит множитель около 1/(1+1) или 1/2, а дата два лет даст 1/(2+1) или 1/3.

Другие вопросы по тегам