lucene set boost на полях во время поиска - PullRequest
2 голосов
/ 28 августа 2009

Можно ли настроить усиление поля с помощью объекта Query перед запуском поиска? Я знаю, что правильный способ сделать это - изменить прирост полей во время индексации, но создание индекса заняло около 4 дней, и мне было просто интересно, есть ли быстрый способ взлома, который я могу сделать сейчас.

также я попробовал жесткое кодирование в ускорении поискового запроса, т.е. И поле (это что другое) ^ 7

и это работает, и это будет конец, за исключением того, что я хочу уменьшить актуальность этой части запроса, я хочу

И поле (это что другое) ^. 1

но я получаю пустые результаты.

спасибо

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Вы можете расширить Сходство, и в Поиске, используйте

setSimilarity(Similarity)

Расширяя сходство, вы можете адаптировать механизм подсчета в Lucene к вашим потребностям.

EDIT:

Более конкретно, вы можете переопределить метод lengthNorm в Similarity (или его подклассе):

public float lengthNorm(String fieldName, int numTokens){
    return fieldWeights.get(fieldName)*super.lengthNorm(fieldName, numTokens);
}

fieldWeights может быть атрибутом карты, в котором вы указываете вес, который вы хотите прикрепить к каждому полю. Если вы где-то сохраняете ссылку на fieldWeights, вы можете изменить вес поля на любой, какой вы хотите, непосредственно перед выполнением поиска (но для эксперимента делайте это только для одного запроса за раз).

0 голосов
/ 29 августа 2009

Почему бы просто не увеличить нужные термины с более высоким значением и оставить те, которые вы пытаетесь отменить, на нуле?

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