2009-08-08 2 views
0

EDIT:今のハックで解決Zend_Search_Luceneに - ZF-5545の問題に類似し

。ライン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

そしてどうやら解決策はありません。未定義はちょうどその配列値を取得しようとしていることを意味オフセット

Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8()); 

答えて

1

は、私はまた、UTF-8互換のテキスト解析を(私はインデックスの唯一のラテン1文字を持っているにもかかわらず)を使用して試してみました存在しません。解決策は、array_key_existsをまずチェックして、キーが設定されていることを確認することです。エラーで述べたファイルのソースからは、ライン473(第2及び第六行が追加されている)に近い状態ならば、これを追加する必要があるだろう:

現在
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); 
    } 
} 

、なぜなら$この - > _重み[ $ termId] - > getValue()を他の値で乗算してから$ scoreに加算すると、乗算の結果は0になり、何も加算されず、結果が正しく出力されます。 ifを追加すると、何も追加されないので、これを変更しません。

+0

私はそれをして、私はまだエラーが発生します。 –

+0

$ docIdが定義されていないようです。 –

+0

&& isset($ docId)をifに追加してみますか? – Cahlroisse

1

あなたは警告をsurpressするために、この条件を入れてあります。

場合(array_key_exists($ TERMID、$この - > _ termsFreqs)& & array_key_exists($ DOCID、$この - > _ termsFreqs [$ TERMID])) {...}

しかし、これは便利であれば疑問が残ります。この未定義オフセットの原因となる論理エラーが存在する可能性があります。