Повысьте равномерно по полю различной длины - PullRequest
2 голосов
/ 20 февраля 2012

У меня есть текстовое поле, которое может иметь несколько значений.

документ 1: поле а: "X Y"

документ 2: поле а: "Х"

Я хочу иметь возможность:

а: Х ^ 5

И у обоих документов 1 и 2 одинаковый счет. Я бездельничал со всеми вариантами поля, но всегда получаю, что документ 2 получает вдвое больше очков, чем документ 1.

Я попытался установить multiValued = "true", но получил тот же результат.

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

Ответы [ 2 ]

5 голосов
/ 20 февраля 2012

Отключите нормы, установив omitNorms=true в своей схеме и переиндексировав - это должно отключить нормализацию длины для поля и дать вам желаемые результаты.

Подробнее о том, что делает omitNorms, см. this .

4 голосов
/ 20 февраля 2012

Поле a из doc 2 имеет только one термин по сравнению с doc 1, который имеет two.

Solr Реализация DefaultS Similartiy Реализация учитывает норма длины , количество слагаемых в поле, для полей при вычислении оценки.

Длина: 1.0 / Math.sqrt(numTerms)

LengthNorm позволяет повысить оценку более коротких документов.

Вы можете предоставить собственную реализацию класса Similarity, которая не учитывает lengthNorm.
Проверьте computeNorm реализацию метода.

Вы можете изменить нормы, используя omitNorms = false.
Нормы учитывают увеличение времени индекса и нормализацию длины поля. Это позволяет вам добавлять улучшения к полям во время индексации и делает оценку более коротких документов выше.
Таким образом, вы потеряете оба из вышеперечисленного, если вы используете его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...