2013-03-04 78 views
0

我對Solr比較新,所以請原諒我,如果我失去了一些明顯的東西。我有一個允許用戶搜索音樂藝術家的應用程序。索引來自一個只讀數據庫,正確的拼寫,所以在索引方面,我已經想通了。solr PatternReplaceCharFilterFactory意外工作

在查詢方面,但我需要預測各種拼寫錯誤/差異,並希望幫助solr找到這些實例。從我們的老本土搜索解決方案中,我列出了正則表達式和他們應用的藝術家。當我試圖使用PatternReplaceCharFilterFactory將它們翻譯成solr時,我注意到一些完美的工作,而另一些完全沒有工作...在他們之間看起來沒有韻律和理由。

例如:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="em[ei]n[ei]m" replacement="Eminem"/> 

準確地抓住阿姆的常見的拼寫錯誤。但對於樂隊311:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[Tt]hree [Ee]leven" replacement="311"/> 

不起作用。另一個例子是九英寸的指甲:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="((nine|9).*inch.*nails\b)|(n\.? ?i\.? ?n\.?\b)" replacement="Nine Inch Nails"/> 

完美的找到樂隊的名字最常見的模式。但對於夏娃6:

 <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[Ee]ve.{0,4}([Ss]ix|6)" replacement="Eve 6"/> 

有沒有什麼根本我失蹤了這個過濾器的使用?我已經嘗試了上面提到的正則表達式的一些變體(甚至使用'三十一'等文字),但仍然沒有成功。我已經嘗試過濾器是分析器中唯一的PatternReplaceCharFilterFactory。我也確切地知道這些項目在索引中是正確的,因爲當我搜索正確的拼寫時,它會返回正確的結果。

有什麼建議嗎?

Snowdall

回答

3

我懷疑問題是不是與你的煤焦廠,但接下來發生的一切畢竟,具體的分詞器。如果您使用標準的標記器,它將擺脫剛剛放入流中的數字。如果您不需要將文本拆分爲令牌,則可以改爲使用KeywordTokenizerFactory

一般來說,在Solr 4+中排除此故障的最佳方法是Admin WebUI中的分析屏幕。它允許您針對特定字段類型輸入文本,並查看分析鏈中每個組件後發生的情況。

0

我會推薦使用SynonymFilter來處理你描述的應用程序。它可以讓你提供一個外部文件,你列出單詞及其同義詞,如:

eminem <=> emenem 
nine <=> 9 

如果此之前用LowerCaseFilter,你就不必計較你的同義詞情況正常化。只要你不標記化(例如,像Alexander Rafalovitch建議的那樣使用KeywordTokenizer),你也應該能夠處理311個案例。