PHP Zend Lucene使搜索“不区分重音”,如“不区分大小写”

时间:2012-03-06 16:17:17

标签: php zend-framework lucene diacritics

所以我使用Zend_Search_Lucene为网站制作搜索引擎

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

在谷歌(和其他搜索引擎)搜索“χιονι”时,它将返回其所有变体的结果,例如“χιόνι”,这是希腊语中的正确重音版本(χιόνι= snow btw)。在lucene(一般来说,不仅是Zend_Search_Lucene)这不是默认的,甚至是我看过的捆绑行为

我首次尝试解决方案是做一些lucene对不区分大小写的搜索 - 分析器所做的事情,从字母中删除重音,就像不区分大小写的分析器在索引期间简单地将所有内容都设置为小写一样。搜索(即$ str = strtr($ str,'Â','ο'))

这次失败的唯一原因是因为php没有mb_strtr而strtr对这样的多字节字符不起作用,并且preg_replace只是不起作用

有没有办法在“accent-insensitive”模式下进行lucene搜索(分析器可能?),或者在php中使用unoccent多字节字符的方式(我也搜索过没有结果)?

请注意,我想要搜索的不是西欧的重音字符,网上有一些非常简单的php解决方案

1 个答案:

答案 0 :(得分:1)

您是否尝试过normalizer_normalize从文本中移除变音符号:How to remove diacritics from text?

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

然后,您可以创建一个令牌过滤器(通过扩展Zend_Search_Lucene_Analysis_TokenFilter)来规范化您的关键字。

我不知道它是否适用于您的编码。