2015-07-01 28 views
0

我們正在使用不同的UTF-8標準化數據。我們確實獲得了大多數時候編寫的UTF-8,但UTF-8也被分解了。我們想用Apache Solr搜索這些數據,現在我們遇到了一些麻煩。我給你舉個例子(的Rabbi Akiva Eger):如何使用Apache Solr處理不同的UTF-8規範化?

(1) NFD: ʿAqîvâ Ben-Moše Êger cabf417169cc827661cc822042656e2d4d6f73cc8c652045cc82676572 
(2) NFC: ʿAqîvâ Ben-Moše Êger cabf4171c3ae76c3a22042656e2d4d6fc5a16520c38a676572 
(3) ASCII: Aqiva Ben-Mose Eger  41716976612042656e2d4d6f73652045676572 

我們發現,Solr的不處理(1)等於(2)或(3)。這對我們來說是個問題,因爲只能用鍵盤輕鬆輸入ASCII字符。當您搜索(3) - 鍵盤輸入時 - 您將無法找到(1)或(2)的數據。

有沒有一種簡單的方法可以通過Solr選項啓用此功能,還是需要在我們的搜索索引中以UTF-8 NFC,NFD和ASCII格式輸出數據以獲得所有三種變體的搜索結果!?

回答

0

solr.ICUNormalizer2FilterFactory應該解決這個問題。

+0

該過濾器如何解決問題?我們可以過濾一個表單,如果決定使用NFD,我們仍然有問題,沒有人會鍵入UTF-8分解。我很困惑... – Michael

+0

對不起,沒有意識到主要問題是獲取ASCII輸入。在這種情況下,您必須確保索引數據以ASCII爲基礎進行匹配。爲此,有一個'solr.ICUFoldingFilterFactory'(在上面鏈接的維基頁面上,在'solr.ICUNormalizer2FilterFactory'的正下方),它應該會噴出ASCII碼。 (我說「應該」,因爲我沒有安裝必需的擴展程序,因此無法嘗試它。)對於NFC,使用'solr.ASCIIFoldingFilterFactory'來獲取ASCII碼就足夠了。當然這也應該爲查詢完成,以防有人輸入NFC。 – BlueM