1

私は 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()。しかし問題は、ドキュメントを削除した後でも、ドキュメントを検索でき、そのフィールドの値を表示できることです。

インデックスを最適化した後に確認しましたが、問題はまだ発生しています。ドキュメントを完全に削除するか、インデックスから削除されていないドキュメントを検索する必要があります。

4

1 に答える 1

0

検索結果をループして、ドキュメントが削除されているかどうかを確認します。その場合は、検索結果から削除してください。

Zend_Search_Lucene::isDeleted($id) メソッドを使用して、ドキュメントが削除されているかどうかを確認できます。

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

インデックスの構築による: ドキュメントの更新

于 2013-01-01T07:43:36.333 に答える