Поиск Lucene — оценка выше, если в поле есть слово или подобное

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

Моя проблема в том, что если я ищу «Отель Шертон», я получаю это как лучший результат.

  1. Пети Отель
  2. сумасшедшая корова
  3. Симмонс

И я хотел бы, чтобы у этих были самые большие результаты

  1. Отель Мауи Шератон рядом с луной
  2. Фантастический отель, похожий на Шератон

Я хочу, чтобы, если внутри были слова «Я ищу» или аналогичные, в этом случае в поле hotelName они имеют больший балл ... помимо длины текста поля.

Я предполагаю, что для Lucene "Seraton Hotel" больше похож на "Crazy Cow", чем на "фантастический отель, похожий на Sheraton".


person orlandoMG    schedule 20.08.2010    source источник
comment
Поскольку, когда слово или слова находятся внутри поля в моем индексе, ... иметь этот документ с большей оценкой - это именно то, что делает Lucene, возможно, вы используете его по ошибке. Пожалуйста, опубликуйте свой код индексации и поиска вместе с запросами, которые вы пытаетесь выполнить.   -  person synhershko    schedule 22.08.2010
comment
согласен с @synhershko, твой вопрос не имеет смысла. Пожалуйста. перефразируйте свой вопрос (с лучшей дикцией и грамматикой) и/или еще лучше опубликуйте свой код в области, с которой у вас возникли проблемы.   -  person Mikos    schedule 23.08.2010
comment
Хорошо, я немного изменю свой метод и постараюсь написать что-то более чистое. Спасибо.   -  person orlandoMG    schedule 24.08.2010


Ответы (1)


TermQuery ищет точные совпадения, FuzzyQuery делает немного по-другому. Не зная, что такое hotelNameToSearch и hotel.getName().toLowerCase, я не могу сказать, что происходит, но почему вы не используете встроенный queryParser? Просто добавить тильду (~) с числовым значением, чтобы обозначить нечеткий запрос?

person synhershko    schedule 24.08.2010
comment
Привет Synhershko, в моем первом подходе я сделал это с помощью queryParser и с лучшим результатом, но мой босс не хочет этого. Нет, они хотят, чтобы это было сделано с помощью TermFreqVector... Спасибо за помощь! - person orlandoMG; 25.08.2010