Я использую поисковую систему Apache Solr для индексации моей базы данных веб-сайта..
Я использую django+http://haystacksearch.org/
Так скажем, у меня есть документ, которые имеют слово "Chicken"
То, когда я ищу "курицу" - solr, может найти этот документ
Но Когда я ищу "птенца" - он ничего не находит..
Существует ли способ зафиксировать это?
Примечание: Следующее решение специфично для Solr 1.4 (и выше) !
Для большей гибкости я бы рекомендовал индексировать Ваши данные с помощью NGramTokenizerFactory для выполнения полного поиска с использованием спереди и сзади wildcard. Если Вы хотите просто искать подстроки в начале или в конце строки, подумайте об использовании 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>
Если вы хотите найти все слова, которые начинаются с цыпленка, ищите цыпленка*.
.Другой подход, если у вас возникли проблемы с небольшим набором слов, было бы использовать Solr.synonymfilterfactory
http://wiki.apache.org/solr/analyzersticoStokens # Solr.synonymfilterfactory
Вам просто нужно поддерживать простой текстовый файл, содержащий синонимы:
chick peep chicken
dawg hound dog
moggie puss kitten cat
Syrurals следует позаботиться о себе с другими фильтрами.