Поиск только в неподтвержденных документах с использованием Zend Lucene - PullRequest
1 голос
/ 15 февраля 2012

Я не новичок в Zend Lucene, но у меня проблемы с поиском, используя его. Я ищу документы по номерам, используя следующий код:

$term = new Zend_Search_Lucene_Index_Term($id, $idFieldName);
$docIds  = $index->termDocs($term);
foreach ($docIds as $id) {
    $doc = $index->getDocument($id);
    echo $doc->artist_name;
}
$index->commit();

и удаляю документ по номеру, используя следующий код:

$term = new Zend_Search_Lucene_Index_Term($id, $idFieldName);
$docIds  = $index->termDocs($term);
foreach ($docIds as $id) {

    $doc = $index->getDocument($id);
    $index->delete($doc->lyric_id);

}
$index->commit(); 

Когда я удаляю документ, $index->numDocs() отображает, что документ удален, поскольку возвращаемое значение не равно возвращенному значению $index->count().но проблема в том, что после удаления документа я могу искать в нем еще и отображать значения его полей.

Я проверил это после оптимизации индексов, но проблема еще жива.Мне нужно полностью удалить документ или выполнить поиск в документах, которые не удалены из индексов.

1 Ответ

0 голосов
/ 01 января 2013

Просмотрите результаты поиска и убедитесь, что документ удален.Если это так, удалите его из результатов поиска.

Метод Zend_Search_Lucene :: isDeleted ($ id) можно использовать для проверки удаления документа.

for ($count = 0; $count < $index->maxDoc(); $count++) {
if ($index->isDeleted($count)) {
    echo "Document #$id is deleted.\n";
} }

через Создание индексов: обновление документов

...