Массив Zend_Search_Lucene - похож на выпуск ZF-5545 - PullRequest
0 голосов
/ 08 августа 2009

EDIT:

Решено с помощью хака на данный момент. Добавлено в строке 473:

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

}

Это происходит только тогда, когда я ищу несколько слов, например ::10000

+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 ]

1 голос
/ 27 ноября 2009

Вы должны поставить это условие, чтобы снять предупреждение:

if (array_key_exists ($ termId, $ this -> _ TermsFreqs) && array_key_exists ($ docId, $ this -> _ termFreqs [$ termId])) {...}

Но остается вопрос, полезно ли это. Может быть логическая ошибка, вызывающая это неопределенное смещение.

1 голос
/ 08 августа 2009

Неопределенное смещение просто означает, что он пытается получить значение массива, которого не существует. Решение состоит в том, чтобы сначала проверить 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 не изменит этого, поскольку ничего не будет добавлено в любом случае.

...