2

这个快把我逼疯了。我正在尝试从 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"));
...

非常感谢任何帮助!

4

1 回答 1

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

我只是对其进行了评论,然后它就起作用了。由于不再进行转换,因此没有什么会导致转换失败。

我希望它有所帮助。

于 2015-05-07T09:35:49.250 回答