1

我对 Zend_Search_Lucene 和非英语字符(如德语 ÄÖÜ)有一些问题。我的数据库返回 UTF-8 格式的字符串,所以我认为一切都会正常工作。

在遇到严重的编码问题后,我在网上搜索并发现,以下代码行解决了大多数人的问题:

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

事实上,这并没有解决我的问题。今天我想出了一个可行的解决方案:(不是utf8_decode

$doc->addField(Zend_Search_Lucene_Field::keyword('division', utf8_decode($contact->division)), 'utf-8');

好吧,这工作得很好,但坦率地说,它看起来很奇怪。为什么我必须来回转换字符串?也许我使用 Lucene 错了?或者这是一个错误?

4

1 回答 1

0

查询和存储数据是两件不同的事情。如果您的查询是用 utf-8 编码的,那么您的数据(文档)也应该是 utf-8 编码的,以便与查询匹配。

最后

$doc->addField(Zend_Search_Lucene_Field::keyword('division', utf8_decode($contact->division)), 'utf-8');

应该是

$doc->addField(Zend_Search_Lucene_Field::keyword('division',$contact->division, 'utf-8'));
于 2011-10-09T10:56:39.050 回答