gpt4 book ai didi

PHP Zend Lucene 在 "accent-insensitive"中搜索 "case-insensitive"

转载 作者:搜寻专家 更新时间:2023-10-31 21:15:33 26 4
gpt4 key购买 nike

所以我正在使用 Zend_Search_Lucene 为网站制作一个搜索引擎

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

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

我的第一个解决方案尝试是做一些 lucene 对不区分大小写的搜索所做的事情 - 分析器,从字母中删除重音,就像不区分大小写的分析器在索引和搜索期间简单地将所有内容变成小写一样(即 $str = strtr($海峡, 'O', 'ο'))

失败的唯一原因是 php 没有 mb_strtr 并且 strtr 不适用于像这样的多字节字符,而 preg_replace 也不起作用

有没有办法在“不区分重音”模式下进行 lucene 搜索(可能是分析器?),或者在 php 中取消重音多字节字符的方法(我也搜索过这个但没有结果)?

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

最佳答案

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

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

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

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

关于PHP Zend Lucene 在 "accent-insensitive"中搜索 "case-insensitive",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com