Проблема Lucene с И/ИЛИ

Могу ли я в любом случае гарантировать, что каждый документ со всеми условиями запроса всегда оценивается выше, чем документы с меньшим количеством условий запроса?

Обратите внимание, что я не хочу придерживаться семантики AND. Я по-прежнему хочу показывать результаты, если нет документа, соответствующего всем условиям запроса.


person Felipe Hummel    schedule 21.04.2011    source источник
comment
Дох. Комментарий отозван. Что ж, вы могли бы позаимствовать базовую концепцию DisMax... она построена поверх Lucene.   -  person Frank Farmer    schedule 22.04.2011


Ответы (1)


одна (безопасная и быстрая) вещь, которую вы можете попробовать, - это создать подкласс DefaultSimilarity и настроить вычисление коэффициента координации. Вычисление по умолчанию представляет собой базовую дробь (так, например, документ, который соответствует только 2 из 3 терминов, по-прежнему получает 2/3 коэффициента координации как документ, который соответствует всем 3).

Если этот фактор (соответствие всем терминам запроса) важен для вас, то я предлагаю вам явно повышать ценность документов, которые соответствуют всем терминам запроса, еще больше, ниже приведен пример, который снова снижает оценку вдвое для любого документа, который не t соответствуют всем условиям запроса.

Например:


@Override
public float coord(int overlap, int maxOverlap) {
  return (overlap == maxOverlap) 
  ? 1f
  : 0.5f * super.coord(overlap, maxOverlap);
}

Этот фактор более подробно описан здесь: Документация по сходству с Lucene

person Robert Muir    schedule 22.04.2011