我正在为一个法国网站的搜索引擎与Zend_Search_Lucene作为一个独立的组件。我的本地well服务器(WAMP)在windows上运行得很好,但带有重音的单词(如: 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上找不到任何关于这方面的信息。
发布于 2011-06-26 19:42:46
我有一个网站设置与您的完全相同的选项(不敏感,utf-8,和)。但是,我过去常常通过以下方式创建索引对象:
$index = new Zend_Search_Lucene('/path/to/index');
而不是通过代理(就像您通过Zend_Search_Lucene::open
的情况一样,但这不会有任何不同)。
此外,我只是将查询(在简短的健全性检查之后)直接传递给索引(不进行解析):
$query = $_GET['q'];
...
$results = $index->find($query);
https://stackoverflow.com/questions/6486185
复制相似问题