1

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

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

在此处查看我生成的索引的屏幕截图

我试图用分析器的参数强制编码,用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 上运行,我觉得我在某处缺少一层编码,但我在谷歌上找不到任何关于此的信息。

4

1 回答 1

0

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

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

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

此外,我只是将查询(经过简短的完整性检查)直接传递给索引(无需解析):

$query = $_GET['q'];
...
$results = $index->find($query);
于 2011-06-26T19:42:46.353 回答