Apache solr поиск часть слова

Я использую поисковую систему apache solr для индексирования базы данных моего сайта..

Я использую django+http://haystacksearch.org/

Итак, предположим, у меня есть документ, в котором есть слово "курица"

когда я ищу "курица" - solr может найти этот документ

но когда я ищу "цыпленка" - он ничего не находит..

есть ли способ исправить это ?

5 ответов


Примечание: следующее решение Solr 1.4 (и выше) конкретные!

для большей гибкости я бы рекомендовал индексировать ваши данные с помощью NGramTokenizerFactory для выполнения полного переднего и заднего поиска подстановочных знаков. Если вы просто хотите найти подстроки в начале или конце строки, рассмотрите возможность использования EdgeNGramTokenizerFactory.

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

<fieldType name="text" class="solr.TextField" >
<analyzer type="index">
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />
    <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

Если вы хотите найти все слова, которые начинаются с chick, найдите chick*.


когда я использовал

<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />

для поиска подстановочных знаков из ответа Брайана время индексации Solr драматически увеличилось. Более чем в 20 раз! Другое решение проблемы поиска подстановочных знаков я нашел здесь:

http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/

вам нужно просто добавить filter

<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />

(по умолчанию tokenizer-solr.WhitespaceTokenizerFactory в индексном блоке FieldType). Для меня результат был таким же с меньшими системными затратами.


другой подход, если у вас возникли проблемы с небольшим набором слов, будет использовать solr.SynonymFilterFactory

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory

вам просто нужно поддерживать простой текстовый файл, содержащий синонимы:

chick peep chicken
dawg hound dog
moggie puss kitten cat

Plurals должны позаботиться о себе с другими фильтрами.


Я не менял никаких настроек. Я просто использую star спереди и сзади моей строки поиска: * chicke * (без пробела в конце - > это из-за такого форматирования слова, как курсив, если вы используете * в начале и в конце)