2013-08-15 1 views
4

У меня возникла проблема с 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.

ответ

3

Кажется, что Lucene угасает, когда вы пытаетесь переиндексировать что-то, что находится в процессе индексации уже. Для того, чтобы убедиться в том, что, попробуйте следующее:

  • Установите updateinterval вашего индекса действительно высокое значение (8 часов).

  • Затем остановите w3wp.exe и удалите индекс.

  • После удаления индекса попытайтесь перестроить индекс в Sitecore и дождитесь его завершения.
  • Повторите тест и проверьте, не произошло ли это.

Если этого не происходит, больше это будет updateinterval слишком низко, который вызывает ваш индекс (что, вероятно, все еще строится), которые будут перезаписаны с новым (что не будет закончено либо), что вызывает ваш файл segments.gen, чтобы содержать неправильную информацию индекса.

Этот файл .gen будет указывать ваш indexreader тем сегментам, которые являются частью вашего индекса и воссозданы после восстановления индекса.

Вот почему я предлагаю попытаться отключить обновления в течение большого количества времени и перестроить его вручную.