Как добавить документы в 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);
}
Когда сеанс удаляется, все ожидающие изменения в сеансе записываются в индекс, а затем фиксируются. Это делается в контексте синхронизации, чтобы гарантировать, что все изменения в сеансе фиксируются и рассматриваются атомарно, когда запросы выполняются в других потоках.