Подтвердить что ты не робот

Apache solr ищет часть слова

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

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

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

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

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

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

4b9b3361

Ответ 1

Примечание. Следующее решение - это 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>

Ответ 2

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

Ответ 3

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

<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 class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />

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

Ответ 4

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

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

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

chick peep chicken
dawg hound dog
moggie puss kitten cat

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

Ответ 5

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