2012-03-06 65 views
2

所以我想提出一個搜索引擎使用的Zend_Search_Lucene的PHP Zend Lucene的做搜索「不區分重音」,如「不區分大小寫」

網站

我目前使用Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive的正常工作,除了一兩件事:它會區分重音字符和非重音字符

在google(以及其他搜索引擎)中,當您搜索「xιονι」時,它將返回所有變體的結果,如「χιόνι」,這是希臘語中正確的重音版本(χιόνι=雪btw)。在lucene中(一般來說,不僅是Zend_Search_Lucene),這不是默認或甚至是我看到的捆綁行爲

我第一次嘗試解決方案是做類似於lucene對不區分大小寫的搜索 - 分析器,刪除從信的口音以同樣的方式不區分大小寫分析儀只是讓一切都在索引&檢索(即:$海峽= strtr函數的效率($海峽,「ό」,「ο」))小寫

這個失敗的唯一原因是因爲PHP不有一個mb_strtr和strtr不適用於這樣的多字節字符,並且preg_replace只是沒有工作要麼

有沒有辦法讓lucene搜索「AC cent-insensitive「模式(一個分析器可能?),或者一種方式來在PHP中的unaccent多字節字符(我也做過搜索沒有結果)?

記住的是我要尋找的不是西歐式重音的字符其中有PHP的網站上的一些unaccent解決方案

回答

1

你試過normalizer_normalize從文本中刪除變音符號:How to remove diacritics from text?

您也可以使用$str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str);

然後,您可以創建令牌過濾器(通過擴展Zend_Search_Lucene_Analysis_TokenFilter)來規範化關鍵字。

我不知道它是否適用於您的編碼。

+0

這個確切的解決方案沒有奏效,因爲它的每一個「特殊」的字符轉換爲一個問號(?),但轉換爲「UTF-7 // // TRANSLIT忽略」看起來像它可以工作,我會盡快執行一些測試 – dimvic 2012-03-16 16:11:13

+0

ps。無論normalizer_normalize也不是爲某種原因,我的系統上正規化::正常化的工作,我無法找到任何軟件包安裝它,Ubuntu的11.10,爲此獨自一人我不會考慮它,即使它看起來像它可以工作 – dimvic 2012-03-16 16:24:39

+0

的iconv結果因平臺而異。在Windows上,它使用libiconv,在Unix上,glibc。還有translit:http://derickrethans.nl/projects.html#translit – Maxence 2012-03-17 08:06:40