的Apache Solr實現搜索部分..我使用Apache Solr實現搜索引擎來索引我的網站數據庫中的字
我使用Django + http://haystacksearch.org/
所以我們可以說我有Word文檔「雞「
當我搜索‘雞’ - Solr的可以找到這個文件
但是當我搜索‘小雞’ - 它沒有找到任何東西..
有沒有辦法解決這個問題?
的Apache Solr實現搜索部分..我使用Apache Solr實現搜索引擎來索引我的網站數據庫中的字
我使用Django + http://haystacksearch.org/
所以我們可以說我有Word文檔「雞「
當我搜索‘雞’ - 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 *。
我無法使用\ *小雞\ *?可能嗎? – 2012-03-29 11:27:25
@soundar,這是一個**糟糕的小雞;)你不能有* infront的搜索關鍵字,Lucene不支持。 – 2014-06-21 17:55:10
一種不同的方法,如果您有一小部分的話麻煩,是使用Solr的。 SynonymFilterFactory
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
你只需要維護一個包含同義詞簡單的文本文件:
chick peep chicken
dawg hound dog
moggie puss kitten cat
複數應該照顧自己與其他過濾器。
當我用
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />
,用於進行從Brian的回答通配符搜索,Solr的索引時間dramaticly增加。超過20次! 通配符搜索問題的其他決定,我發現在這裏:
http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/
你只需要添加濾鏡
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />
(默認標記生成器 - solr.WhitespaceTokenizerFactory中的FieldType的索引塊)。對我來說,結果與系統成本更低一樣。
我沒有改變任何配置。我只是在前面和後面的searchString中使用星號:* chicke *(末尾沒有空格 - >因爲如果在開始和結尾使用*,SO格式化單詞爲斜體)
solr 1。5 - 這是開發版嗎? (沒有發佈?) – 2009-12-30 13:22:52
有沒有類似1.4的解決方案? – 2009-12-30 13:24:02
好趕上:我改正了答案反映1.4 – Brian 2009-12-30 15:58:26