Lucene регистрозависимый и нечувствительный поиск - PullRequest
9 голосов
/ 21 марта 2010

У меня есть индекс Lucene, который в настоящее время чувствителен к регистру. Я хочу добавить опцию для поиска без учета регистра в качестве запасного варианта. Это означает, что результаты, соответствующие случаю, получат больший вес и появятся первыми. Например, если количество результатов ограничено 10, и есть 10 совпадений, которые соответствуют моему случаю, этого достаточно. Если бы я нашел только 7 результатов, я мог бы добавить еще 3 результата из поиска без учета регистра.

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

Один из возможных подходов - иметь 2 индекса. Один с делом и один без и искать оба. Естественно, здесь есть некоторая избыточность, поскольку мне нужно индексировать дважды.

Есть ли лучшее решение? Идеи?

Ответы [ 2 ]

6 голосов
/ 21 марта 2010

Вы уже пробовали copyField? см http://wiki.apache.org/solr/SchemaXml#Copy_Fields

Если не определить новое поле B с другой конфигурацией и скопировать поле A в B через copyField

5 голосов
/ 22 марта 2010

Поиск Lucene чувствителен к регистру, просто все входные данные обычно в нижнем регистре при прохождении через Queryparser, так что кажется, что это без учета регистра. Другими словами, не вводите строчные буквы раньше индексирование, и не строчные запросы (то есть выбрать анализатор, который не строчные) ключевое слово-анализатор например.

[setLowercaseExpandedTerms][1](boolean lowercaseExpandedTerms)

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

посмотрите на запросы Wildcard, Prefix и Fuzzy

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