【发布时间】:2012-03-06 16:17:17
【问题描述】:
所以我正在使用 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 也不起作用
有没有办法在“重音不敏感”模式下进行 lucene 搜索(可能是分析器?),或者在 php 中不重音多字节字符的方法(我也对此进行了搜索但没有结果)?
请注意,我要搜索的不是西欧重音字符,网上有一些针对 php 的非重音解决方案
【问题讨论】:
标签: php zend-framework lucene diacritics