1

単純な検索モジュールを実装するために Lucene.Net (バージョン 2.9.4.1) を使用しています。次のコードを使用して、ドキュメントがインデックスに存在する場合、ドキュメントを削除しようとしています。

var analyzer = new StandardAnalyzer(Version.LUCENE_29);
var indexWriter = new IndexWriter(
    LuceneSearch._luceneDir,
    analyzer,
    IndexWriter.MaxFieldLength.UNLIMITED);            

var searchQuery = new TermQuery(new Term("ListID", listingDoc.Get("ListID")));

indexWriter.DeleteDocuments(searchQuery);

ドキュメントが存在する場合は削除してから、インデックスに再度追加しようとしているlistingDocタイプです。追加部分は正常に機能しますが、削除部分は機能しません。つまり、ドキュメントが存在する場合は削除されません。Documentしたがって、用語を検索して一致すると、複数回表示されます...ここで間違っていることを指摘してください

ASP.Net MVC3 と Entity Framework4 を使用しています。レコードが更新されるたびに、インデックスを更新するつもりですが、代わりに複製されています。検索すると、更新の回数に応じて、結果が 2 回または 3 回表示されます。

使っindexWriter.UpdateDocument(args);てみたけど駄目…

4

2 に答える 2

4

削除をデバッグする場合、delete コマンドと同じパラメーターを使用して検索を実行すると、何が削除されるかを正確に確認できる場合があります。

を実行している場合は、次のようにdeleteDocuments(query)使用する必要があります。IndexSearcher

IndexSearcher is = new IndexSearcher(indexWriter.GetReader());
TopDocs topDocs = is.Search(query, 100);

そして、topDocs で何が得られるかを確認してください。クエリが結果を返さないことがわかると思います。

于 2012-07-02T06:15:03.900 に答える