Sitecore Lucene索引-使用高级数据库爬虫未找到文件异常
我在我们的内容管理环境中遇到了Sitecore/Lucene问题,我们有两个内容交付环境,这不是问题。我正在使用高级数据库爬虫来索引一些已定义模板的项。索引指向主数据库 索引将保持“稳定”几个小时左右,然后在日志中我将开始看到这个错误出现。如果我尝试打开一个搜索引擎Sitecore Lucene索引-使用高级数据库爬虫未找到文件异常,lucene,sitecore,filenotfoundexception,Lucene,Sitecore,Filenotfoundexception,我在我们的内容管理环境中遇到了Sitecore/Lucene问题,我们有两个内容交付环境,这不是问题。我正在使用高级数据库爬虫来索引一些已定义模板的项。索引指向主数据库 索引将保持“稳定”几个小时左右,然后在日志中我将开始看到这个错误出现。如果我尝试打开一个搜索引擎 ManagedPoolThread #17 16:18:47 ERROR Could not update index entry. Action: 'Saved', Item: '{9D5C2EAC-AAA0-43E1-9F8D-
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(boolRecreate)以更改合并计划程序/策略,并调整合并因子。见下文
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(boolClose),以确保每次都打开一个新的阅读器,之后我会尝试一下。我对Sitecore如何处理Lucene及其读者/作者的了解还不够
我还尝试在web配置中使用UpdateInterval值,看看这是否有帮助,可惜没有
我非常感谢任何人a)知道可能发生这种情况的任何情况,以及b)任何潜在的建议/解决方案,因为我开始把头撞到一堵相当大的墙上:)
我们正在使用Lucene 2.3运行Sitecore 6.5 rev111123
谢谢
詹姆斯。当你试图为已经在编制索引的东西重新编制索引时,Lucene似乎会发疯。要验证这一点,请尝试以下操作:
- 将索引的
设置为非常高的值(8小时)updateinterval
- 然后,停止
并删除索引w3wp.exe
- 删除索引后,请尝试在Sitecore中重建索引,并等待此操作完成李>
- 再次测试并查看是否出现这种情况李>
updateinterval
设置过低,导致索引(可能仍在构建中)被新索引覆盖(也不会完成),导致segments.gen
文件包含错误的索引信息
此.gen
文件将把您的索引阅读器
指向哪些段是索引的一部分,并在索引重建后重新创建
这就是为什么我建议尝试在大量时间内禁用更新并手动重建它