修改
现在用黑客解决了。在第473行添加:
if (isset($this->_termsFreqs[$termId][$docId])) {
}
只有在我搜索多个单词时才会发生这种情况,例如:
+word1 +word2 + word3
我收到了这个大错:
Notice: Undefined offset: 2 in C:\wamp\www\project\library\Zend\Search\Lucene\Search\Query\MultiTerm.php on line 473
Notice: Undefined offset: 2 in C:\wamp\www\project\library\Zend\Search\Lucene\Search\Query\MultiTerm.php on line 473
Notice: Undefined offset: 4 in C:\wamp\www\project\library\Zend\Search\Lucene\Search\Query\MultiTerm.php on line 473
Notice: Undefined offset: 4 in C:\wamp\www\project\library\Zend\Search\Lucene\Search\Query\MultiTerm.php on line 473
Notice: Undefined offset: 6 in C:\wamp\www\project\library\Zend\Search\Lucene\Search\Query\MultiTerm.php on line 473
Notice: Undefined offset: 6 in C:\wamp\www\project\library\Zend\Search\Lucene\Search\Query\MultiTerm.php on line 473
Notice: Undefined offset: 1 in C:\wamp\www\project\library\Zend\Search\Lucene\Search\Query\MultiTerm.php on line 473
Notice: Undefined offset: 1 in C:\wamp\www\project\library\Zend\Search\Lucene\Search\Query\MultiTerm.php on line 473
Notice: Undefined offset: 9 in C:\wamp\www\project\library\Zend\Search\Lucene\Search\Query\MultiTerm.php on line 473
Notice: Undefined offset: 9 in C:\wamp\www\project\library\Zend\Search\Lucene\Search\Query\MultiTerm.php on line 473
有趣的是返回的结果集是正确的,所以在制作中我可以关闭错误报告,它会像魅力一样工作,但我不想这样做。
此处记录了类似的问题:http://framework.zend.com/issues/browse/ZF-5545
显然没有解决方案。
我也尝试过使用兼容UTF-8的文本分析器(即使索引中只有拉丁文1个字符):
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
答案 0 :(得分:1)
未定义的偏移仅意味着它正在尝试获取不存在的数组值。解决方案是首先检查array_key_exists以确保密钥已设置。从错误中提到的文件的来源,如果第473行附近的条件(第二行和第六行是添加),则需要添加此项:
foreach ($this->_terms as $termId => $term) {
if (array_key_exists($termId,$this->_weights)) {
$score += $reader->getSimilarity()->tf($this->_termsFreqs[$termId][$docId]) *
$this->_weights[$termId]->getValue() *
$reader->norm($docId, $term->field);
}
}
目前,因为$ this-> _weights [$ termId] - > getValue()乘以其他值然后加到$ score,乘法的结果为0并且没有添加任何内容,因此结果出来正确。添加if不会改变这一点,因为任何方式都不会添加任何内容。
答案 1 :(得分:1)
你必须把这个条件压低警告:
if(array_key_exists($ termId,$ this-> _termsFreqs)&& array_key_exists($ docId,$ this-> _termsFreqs [$ termId])){...}
但问题仍然存在,如果这有用的话。可能存在导致此未定义偏移的逻辑错误。