Zend_Search_Lucene庞大 - 类似于ZF-5545问题

时间:2009-08-08 15:08:29

标签: php zend-framework lucene zend-search-lucene

修改

现在用黑客解决了。在第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());

2 个答案:

答案 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])){...}

但问题仍然存在,如果这有用的话。可能存在导致此未定义偏移的逻辑错误。