【问题标题】:Sitecore Lucene indexing - file not found exception using advanced database crawlerSitecore Lucene 索引 - 使用高级数据库爬虫未找到文件异常
【发布时间】:2013-08-15 13:19:37
【问题描述】:

我在我们的内容管理环境中遇到了 Sitecore/Lucene 问题,我们有两个内容交付环境,这不是问题。我正在使用高级数据库爬虫来索引许多已定义模板的项目。索引指向主数据库。

索引将保持“稳定”几个小时左右,然后在日志中我将开始看到此错误出现。如果我尝试打开一个搜索器。

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 值,看看是否有帮助,可惜没有。

我将非常感谢任何人 a) 知道可能发生这种情况的任何情况,以及 b) 任何潜在的建议/解决方案,因为我开始用头撞到相当大的墙上 :)

我们正在运行带有 Lucene 2.3 的 Sitecore 6.5 rev111123。

谢谢,

詹姆斯。

【问题讨论】:

    标签: lucene sitecore filenotfoundexception


    【解决方案1】:

    当您尝试重新索引已在索引过程中的内容时,Lucene 似乎吓坏了。要验证这一点,请尝试以下操作:

    • 将索引的updateinterval 设置为一个非常高的值(8 小时)。

    • 然后,停止w3wp.exe 并删除索引。

    • 删除索引后,尝试在 Sitecore 中重建索引并等待此操作完成。
    • 再次测试,看看是否会发生这种情况。

    如果这种情况不再发生,那将是 updateinterval 设置得太低,这会导致您的索引(可能仍在构建中)被新的索引(也不会完成)覆盖,从而导致您的segments.gen 文件包含错误的索引信息。

    这个.gen 文件会将您的indexreader 指向哪些段是您的索引的一部分,并在索引重建后重新创建。

    这就是为什么我建议尝试长时间禁用更新并手动重建它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2017-10-15
      相关资源
      最近更新 更多