5

zendluceneを使用してドキュメントを削除しようとしています。以下は私のコードです

$index = Zend_Search_Lucene::open('data/index');
foreach ($index->find('pk:' . $this->getId()) as $hit) {
        $index->delete($hit->id);
    }
$index->commit();

これを実行してインデックスフォルダを確認すると、この_f4t5_1.delのように作成された新しいファイルがあります。

しかし、検索を行うと、削除されたドキュメントが検索で利用可能になり、

$ index->​​ numDocs();

このメソッドも、削除の前後で同じカウントを返します。

どんな助けでも大歓迎です。

4

2 に答える 2

3

問題が見つかりました。この問題は、コードの論理エラーが原因でした。削除した後、別の関数を呼び出して、ドキュメントをインデックスに追加しました。削除後にドキュメントIDが異なることがわかった場合は、ドキュメントIDを確認したところ、問題を追跡するのに役立ちました。助けてくれてありがとう

于 2013-01-01T08:12:08.950 に答える
2

これは役立つかもしれません:phpluceneインデックスファイルの行を更新および削除する方法

ドキュメントが実際に削除されていることを確認しましたか。

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

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

インデックス最適化を実行してみましたか:

インデックスの最適化により、削除されたドキュメントが削除され、ドキュメントのIDがより狭い範囲に絞り込まれます。したがって、ドキュメントの内部IDは、インデックスの最適化中に変更される可能性があります。

于 2012-12-31T18:47:52.343 に答える