按照文档中说明,使用highlightMatches 应该可以解决,可是无论如何,用了这个函数后,出来的都是乱码,到底问题出在哪里,我也没查清楚,用其他的方式解决了,不过很笨。如果你不了解Phpbean_Lucene_Analyzer,请看这篇文章:Zend_Search_Lucene 如何支持中文检索
首先,将查询关键词进行分词,代码如下:
$stopWords = array('a', 'an', 'at', 'the', 'and', 'or', 'is', 'am');
$stopWordsFilter = new Zend_Search_Lucene_Analysis_TokenFilter_StopWords($stopWords);
$analyzer = new Phpbean_Lucene_Analyzer();
$cnStopWords = array('的');
$analyzer->setCnStopWords($cnStopWords);
$analyzer->addFilter($stopWordsFilter);
$value = $item->title;
$analyzer->setInput($value, 'utf-8');
$position = 0;
$tokenCounter = 0;
while (($token = $analyzer->nextToken()) !== null) {
$tokenCounter++;
$tokens[] = $token;
JString::str_ireplace($token,'<font color="CC0033">'.$token."</font>",$content);
}
print_r($tokens);
代码本身很简单,首先对查询关键词进行分词,然后针对每个词,在$content的内容中进行反显替换。这只是一个变通的解决方案,要真正解决,还是好好看看highlightMatches 的代码。我估计还是因为字符集的原因。