Apache Solr Search часть слова
-
21-09-2019 - |
Вопрос
Я использую поисковую систему Apache Solr для индексации своей базы данных веб -сайтов ..
Я использую django+http://haystacksearch.org/
Итак, допустим, у меня есть документ, в котором есть слово «курица»
Когда я ищу «курицу» - Solr может найти этот документ
Но когда я ищу "цыпочку" - он ничего не находит ..
Есть ли способ исправить это?
Решение
Примечание. Следующее решение - 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" />
Для поиска подстановочного знака из ответа Брайана, SOL, индексация индексации резко увеличилось. Более 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). Для меня результат был таким же с меньшими затратами на систему.
Другим подходом, если у вас возникают проблемы с небольшим набором слов, будет использование Solr.SynonyfilterFactory
http://wiki.apache.org/solr/analyzerstokenizerstokenfilters#solr.synonymfilterfactory
Вам просто нужно сохранить простой текстовый файл, который содержит синонимы:
chick peep chicken
dawg hound dog
moggie puss kitten cat
Множество должны позаботиться о себе с другими фильтрами.
Я не изменил никакой конфигурации. Я просто использую звезду впереди и в задней части своего поискового стргинга: * Chicke * (без белого пространства в конце -> это из -за такого форматирующего слова как курсив, если вы используете * в начале и в конце)