Zend Lucene用重音搜索

时间:2011-06-26 19:28:33

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

我正在使用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上工作,我觉得我在某处错过了一层编码但我在谷歌上找不到任何关于此的信息。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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