Php Zend的Lucene荧光笔和unicode

时间:2012-06-16 15:12:21

标签: php zend-framework lucene

这个让我发疯。我试图从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"));
...

任何帮助都非常感谢!!

1 个答案:

答案 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);

我只是评论它然后它起作用了。由于不再进行转换,因此无需转换。

我希望它有所帮助。