这个让我发疯。我试图从Lucene中获取搜索结果,但它不会表现出来。这就是我在做的事情:
$userQuery = Zend_Search_Lucene_Search_QueryParser::parse($_GET['query'], 'utf-8');
$search->results = $this->index->find($userQuery);
然后我检索点击,每次点击我试图突出显示匹配。
$html = $query->highlightMatches($hit->body, 'utf-8');
我正在搜索“attività”:它会找到正确的命中,但它不会突出显示任何内容,它会输出完整的文本以及正确的重音(所以我看到“attività”字未突出显示)。
如果省略highlightMatches中的'utf-8'参数,它将突出显示attività字,但是“à”字符将从输出中截断,因此它将显示“attivit”。在这种情况下,输出字符串是ASCII编码的。
有什么不对?!我的页面是utf-8编码的。我使用以下逻辑添加文档:
// Following two lines are at the initialization so they hold for all code
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8');
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive ()
);
...
$doc->addField(Zend_Search_Lucene_Field::Text($fieldName, $fieldValue, "UTF-8"));
...
任何帮助都非常感谢!!
答案 0 :(得分:1)
使用Zend Lucene Highlighter时遇到了同样的问题。看来,Zend希望在将其返回到您的视图或进一步处理之前,使用iconv将字符串转换为高亮显示为UTF-8。
在我的情况下,iconv无法检测到我的字符串已经是UTF-8,因此转换失败。 reset()函数中Zend_Search_Lucene_Anaylsis_Analyzer_Common_Utf8的以下代码行导致了问题:
$this->_input = iconv($this->_encoding, 'UTF-8', $this->_input);
我只是评论它然后它起作用了。由于不再进行转换,因此无需转换。
我希望它有所帮助。