#java #lucene
#java #lucene
Вопрос:
Могу ли я в любом случае гарантировать, что каждый документ со всеми условиями запроса всегда получает более высокие оценки, чем документы с меньшими условиями запроса?
Обратите внимание, что я не хочу придерживаться семантики AND . Я все еще хочу показать результаты, если нет какого-либо документа, соответствующего всем условиям запроса.
Комментарии:
1. Doh. Комментарий отозван. Что ж, вы могли бы позаимствовать базовую концепцию DisMax … она построена поверх Lucene.
Ответ №1:
одна (безопасная, быстрая) вещь, которую вы можете попробовать, — это подкласс DefaultSimilarity и скорректировать вычисление коэффициента координации. Вычисление по умолчанию представляет собой базовую дробь (так, например, документ, который соответствует только 2 из 3 терминов, по-прежнему получает 2/3 коэффициента координации как тот, который соответствует всем 3).
Если этот фактор (соответствие всем условиям запроса) важен для вас, то я предлагаю вам явно увеличить количество документов, которые соответствуют всем условиям запроса, еще больше, ниже приведен пример, который снова сокращает оценку вдвое для любого документа, который не соответствует всем условиям запроса.
Например:
@Override
public float coord(int overlap, int maxOverlap) {
return (overlap == maxOverlap)
? 1f
: 0.5f * super.coord(overlap, maxOverlap);
}
Этот фактор более подробно описан здесь: javadocs, похожие на Lucene