4

Lucene.Net.Linqプロジェクトは非常に強力なようで、クエリは非常に単純に見えますが、ドキュメントを追加/更新する方法がよくわかりません。例を 1 つまたは 2 つ挙げていただけますか?

4

1 に答える 1

7

https://github.com/themotleyfool/Lucene.Net.Linq/tree/master/source/Lucene.Net.Linq.Tests/Samplesのテスト プロジェクトに完全な例がいくつかあります。

マッピングを構成し、プロバイダーを初期化したら、セッションを開いて更新を行います。

var directory = new RAMDirectory();

var provider = new LuceneDataProvider(directory, Version.LUCENE_30);

using (var session = provider.OpenSession<Article>())
{
    session.Add(new Article {Author = "John Doe", BodyText = "some body text", PublishDate = DateTimeOffset.UtcNow});
}

既存のドキュメントを更新することもできます。セッションからアイテムを取得するだけで、セッションは変更が行われたかどうかを検出します。

using (var session = provider.OpenSession<Article>())
{
    var item = session.Query().Single(i => i.Id == someId);
    item.Name = "updated";
}

または、ドキュメントを削除できます。

using (var session = provider.OpenSession<Article>())
{
    var item = session.Query().Single(i => i.Id == someId);
    session.Delete(item);
}

セッションが破棄されると、セッション内のすべての保留中の変更がインデックスに書き込まれ、コミットされます。これは同期コンテキスト内で行われ、セッション内のすべての変更がコミットされ、クエリが他のスレッドで実行されているときにアトミックに表示されるようにします。

于 2013-11-21T20:10:47.727 に答える