Как добавить документы в Lucene.Net.Linq?

Проект Lucene.Net.Linq кажется довольно мощным, и хотя запросы кажутся довольно простыми, я не совсем уверен, как добавлять / обновлять документы. Можно ли привести пример или два?

1 ответ

Решение

Есть несколько полных примеров в тестовом проекте по адресу 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);
}

Когда сеанс удаляется, все ожидающие изменения в сеансе записываются в индекс, а затем фиксируются. Это делается в контексте синхронизации, чтобы гарантировать, что все изменения в сеансе фиксируются и рассматриваются атомарно, когда запросы выполняются в других потоках.

Другие вопросы по тегам