2009-12-29 50 views

回答

18

注意:以下解決方案是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> 
+0

solr 1。5 - 這是開發版嗎? (沒有發佈?) – 2009-12-30 13:22:52

+1

有沒有類似1.4的解決方案? – 2009-12-30 13:24:02

+0

好趕上:我改正了答案反映1.4 – Brian 2009-12-30 15:58:26

7

如果您想查找所有以小雞開頭的單詞,請搜索chick *。

+0

我無法使用\ *小雞\ *?可能嗎? – 2012-03-29 11:27:25

+0

@soundar,這是一個**糟糕的小雞;)你不能有* infront的搜索關鍵字,Lucene不支持。 – 2014-06-21 17:55:10

4

當我用

<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的索引塊)。對我來說,結果與系統成本更低一樣。

0

我沒有改變任何配置。我只是在前面和後面的searchString中使用星號:* chicke *(末尾沒有空格 - >因爲如果在開始和結尾使用*,SO格式化單詞爲斜體)