的PHP Zend Lucene的做搜索“不区分重音”,如“不区分大小写”
所以我想提出一个搜索引擎使用的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解决方案
你试过normalizer_normalize从文本中删除变音符号:How to remove diacritics from text?
您也可以使用$str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str);
然后,您可以创建令牌过滤器(通过扩展Zend_Search_Lucene_Analysis_TokenFilter)来规范化关键字。
我不知道它是否适用于您的编码。
这个确切的解决方案没有奏效,因为它的每一个“特殊”的字符转换为一个问号(?),但转换为“UTF-7 // // TRANSLIT忽略”看起来像它可以工作,我会尽快执行一些测试 – dimvic 2012-03-16 16:11:13
ps。无论normalizer_normalize也不是为某种原因,我的系统上正规化::正常化的工作,我无法找到任何软件包安装它,Ubuntu的11.10,为此独自一人我不会考虑它,即使它看起来像它可以工作 – dimvic 2012-03-16 16:24:39
的iconv结果因平台而异。在Windows上,它使用libiconv,在Unix上,glibc。还有translit:http://derickrethans.nl/projects.html#translit – Maxence 2012-03-17 08:06:40