Zend_Search_Lucene masif - ZF-5545 soruna benzer

2 Cevap php

EDIT:

Şimdi kesmek ile çözüldü. Hattında 473 Şuna eklendi:

if (isset($this->_termsFreqs[$termId][$docId])) {

}


Bu, örneğin, ben birden fazla kelime Arıyorum yalnızca ne olur:

+word1 +word2 + word3

Ben bu büyük hatayı alıyorum:

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

Komik bir şey döndürülen sonuç kümesi doğru olduğunu, böylece üretimde sadece hata bildirimini kapatmak olabilir ve bu bir cazibe gibi çalışır ama bunu yapmak istemiyorum.

Benzer sorun burada belgelenmiştir: http://framework.zend.com/issues/browse/ZF-5545

Ve görünüşe göre hiçbir çözüm yoktur.

Ben de (I endeksinde sadece Latin 1 karakter olsa bile) UTF-8 uyumlu metin analizörü kullanarak denedi:

Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());

2 Cevap

Offset Tanımsız sadece o yok bir dizi değeri almak için çalışıyor demektir. Çözüm sadece emin anahtarı ayarlandığında yapmak için ilk array_key_exists kontrol etmektir. Hata belirtilen dosya için bir kaynaktan, bu eklemeniz gerekir verirsen hattı 473 yakın durum (ikinci ve altıncı satırları yanı vardır):

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

Halen, çünkü $ this-> _weights [$ Termid] -> getValue () diğer değerleriyle çarpılır ve sonra $ skoru ilave ediliyor, çarpma sonucu 0 ve hiçbir şey eklendi alır, böylece sonuç doğru çıkar. Eğer hiçbir şey gibi bu değişmeyecek ekleme iki şekilde eklenecektir.

Sen uyarı bastırılması için bu koşul koymak zorunda:

if (array_key_exists ($ Termid, $ this-> _termsFreqs) && array_key_exists ($ DOCID, $ this-> _termsFreqs [$ Termid])) {...}

Bu yararlı Ama eğer soru kalır. Bu tanımsız ofset neden bir mantık hatası olabilir.