У меня возникла проблема с Sitecore/Lucene в нашей среде управления контентом, у нас есть две среды доставки контента, где это не проблема. Я использую Advanced Database Crawler для индексации нескольких элементов определенных шаблонов. Указатель указывает на основную базу данных.Sitecore Lucene indexing - исключение из файла не найдено с использованием расширенного искателя базы данных
Индекс останется «стабильным» в течение нескольких часов или около того, а затем в журналах я начну видеть эту ошибку. Вместе с тем, если я попытаюсь открыть Searcher.
ManagedPoolThread #17 16:18:47 ERROR Could not update index entry. Action: 'Saved', Item: '{9D5C2EAC-AAA0-43E1-9F8D-885B16451D1A}'
Exception: System.IO.FileNotFoundException
Message: Could not find file 'C:\website\www\data\indexes\__customSearch\_f7.cfs'.
Source: Lucene.Net
at Lucene.Net.Index.SegmentInfos.FindSegmentsFile.Run()
at Sitecore.Search.Index.CreateReader()
at Sitecore.Search.Index.CreateSearcher(Boolean close)
at Sitecore.Search.IndexSearchContext.Initialize(ILuceneIndex index, Boolean close)
at Sitecore.Search.IndexDeleteContext..ctor(ILuceneIndex index)
at Sitecore.Search.Crawlers.DatabaseCrawler.DeleteItem(Item item)
at Sitecore.Search.Crawlers.DatabaseCrawler.UpdateItem(Item item)
at System.EventHandler.Invoke(Object sender, EventArgs e)
at Sitecore.Data.Managers.IndexingProvider.UpdateItem(HistoryEntry entry, Database database)
at Sitecore.Data.Managers.IndexingProvider.UpdateIndex(HistoryEntry entry, Database database)
Из того, что я прочитал это может быть связано с обновлением по индексу пока есть открытый читатель, и когда операция слияния происходит читатель все равно будет иметь ссылку на удаляемого сегмента, или что-то, что (я не эксперт по Lucene).
Я пробовал несколько вещей без успеха. Включая подкласс, разделяющий объект Sitecore.Search.Index и переопределяющий CreateWriter (bool recreate), чтобы изменить планировщик/политику слияния и настроить коэффициент слияния. Смотри ниже.
protected override IndexWriter CreateWriter(bool recreate)
{
IndexWriter writer = base.CreateWriter(recreate);
LogByteSizeMergePolicy policy = new LogByteSizeMergePolicy();
policy.SetMergeFactor(20);
policy.SetMaxMergeMB(10);
writer.SetMergePolicy(policy);
writer.SetMergeScheduler(new SerialMergeScheduler());
return writer;
}
Когда я читаю индекс Я называю SearchManager.GetIndex (Index) .CreateSearchContext(). Searcher, и когда я закончу получать документы, мне нужно я называю .close(), который я думал, что будет» достаточно.
Я думал, что, возможно, попробую переопределить CreateSearcher (bool close), чтобы каждый раз открывать нового читателя, что я буду делать после этого. Я действительно не знаю достаточно о том, как Sitecore обрабатывает Lucene, своих читателей/писателей?
Я также попытался сыграть со значением UpdateInterval в веб-конфиге, чтобы узнать, поможет ли это, увы, этого не произошло.
Я был бы очень признателен всем, кто: а) знает о любых ситуациях, в которых это может произойти, и б) любые потенциальные советы/решения, поскольку я начинаю ударять головой по довольно большой стене :)
Мы работаем Sitecore 6.5 rev111123 с Lucene 2.3.
Thanks,
James.