Php Zend的Lucene荧光笔和Unicode


Php Zend's Lucene highlighter and unicode

这个快把我逼疯了。我正在尝试从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à"这个词没有突出显示)。

如果我在 highlightMatch 中省略"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"));
...

任何帮助非常感谢!!

我在使用Zend Lucene荧光笔时遇到了同样的问题。看起来,Zend希望在将其返回到您的视图或进一步处理之前,使用iconv将字符串转换为UTF-8。

就我而言,iconv 无法检测到我的字符串已经是 UTF-8,因此转换失败。reset() 函数中的以下Zend_Search_Lucene_Anaylsis_Analyzer_Common_Utf8代码行导致了问题:

$this->_input = iconv($this->_encoding, 'UTF-8', $this->_input);

我只是简单地评论了它,然后它起作用了。由于不再进行转换,因此转换没有什么可以失败的。

我希望它有所帮助。