【问题标题】:Zend_lucene search with accentsZend_lucene 搜索带重音符号
【发布时间】:2023-04-04 09:31:01
【问题描述】:

我正在使用 Zend_Search_Lucene 作为独立组件为法国网站开发搜索引擎。在 Windows 上的本地网络服务器 (WAMP) 上一切正常,但带有重音字词的搜索(例如:géographie)在我的生产服务器(在 Unix 上运行)上不起作用。

我在Linux上生成了索引,重音词被正确索引了。

See a screenshot of my generated index here

我试图用分析器的参数强制编码,用utf8_encode转换查询字符串。 但我仍然无法让它工作。

我用这些参数调用 Lucene:

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator(Zend_Search_Lucene_Search_QueryParser::B_AND);
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive());
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');

$index = Zend_Search_Lucene::open($cheminIndexes);
$resultats = $index->find(Zend_Search_Lucene_Search_QueryParser::parse(utf8_encode($_POST['recherche'])));

此代码返回所有非重音词,但它不返回我的任何重音词,尽管这些词已编入索引。 这令人沮丧,因为我不明白为什么它可以在 Windows 上运行,我觉得我在某处缺少一层编码,但我在 google 上找不到任何相关信息。

【问题讨论】:

    标签: php search full-text-search zend-lucene


    【解决方案1】:

    我的站点设置与您的选项完全相同(不敏感、utf-8、AND)。但是,我曾经通过以下方式创建索引对象:

    $index = new Zend_Search_Lucene('/path/to/index');
    

    而不是通过代理(如您的情况通过Zend_Search_Lucene::open,但这应该没有任何区别)。

    我也只是将查询(经过简短的健全性检查)直接传递给索引(不解析):

    $query = $_GET['q'];
    ...
    $results = $index->find($query);
    

    【讨论】:

    • 谢谢,我发现您可以将编码作为参数传递给解析函数: $resultats = $index->​​find(Zend_Search_Lucene_Search_QueryParser::parse($_POST['recherche'], ' utf-8'));它也有效。
    猜你喜欢
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2011-12-12
    • 2013-05-16
    • 2018-02-13
    • 1970-01-01
    相关资源
    最近更新 更多