Search Sitecore 7.2中带Lucene的可热交换索引

Search Sitecore 7.2中带Lucene的可热交换索引,search,indexing,lucene,sitecore,sitecore7.2,Search,Indexing,Lucene,Sitecore,Sitecore7.2,我正在试验新的Sitecore 7.2功能SwitchOnRebuildLuceneIndex 显然,此功能允许我在重建索引的同时,以只读模式访问我的索引 在我重建索引的同时,有没有办法拥有一个完整的操作索引(不是只读的) 我正在执行的测试如下: 1) 用30k个项目重建自定义索引(需要30秒) 2) 同时索引正在重建:添加Sitecore项目(通过代码) 3) 同时索引重建:访问自定义索引(通过代码)以获取项目的计数 4) 索引完成重建后:访问自定义索引(通过代码)以获取项目计数 在步骤3中,

我正在试验新的Sitecore 7.2功能SwitchOnRebuildLuceneIndex

显然,此功能允许我在重建索引的同时,以只读模式访问我的索引

在我重建索引的同时,有没有办法拥有一个完整的操作索引(不是只读的)

我正在执行的测试如下:

1) 用30k个项目重建自定义索引(需要30秒)

2) 同时索引正在重建:添加Sitecore项目(通过代码)

3) 同时索引重建:访问自定义索引(通过代码)以获取项目的计数

4) 索引完成重建后:访问自定义索引(通过代码)以获取项目计数

在步骤3中,它返回原始项目计数30000 在步骤4中,它返回更新的项目计数30001

谢谢你的帮助
斯特利奥

我认为这是不可能的。从概念上讲,Sitecore本质上是一种软件,它使数据库更加用户友好,并定义了一种技术人员和非技术人员都能理解和遵循的结构。您所谈论的内容与、数据库和的概念背道而驰。我在下面的步骤内联注释中添加了更多技术(数据库)注释:

  • 重建自定义索引…-锁定数据库中的项目并启动事务
  • 同时…:添加sitecore项目…-针对项目运行的单独事务,但不影响在步骤1中启动的事务正在使用的锁定集
  • 同时…:访问自定义…-另一个事务在步骤2中的事务之后运行,因此包括所有项目的计数(包括锁定集和新添加的项目)
  • 索引完成后…-事务1已完成并解除锁定;如果未从索引中计数,则“从自定义索引获取项目计数”返回的计数与“项目计数”不同(添加新项目后,后者更大)

  • 因此,第3步返回新的项目计数,第4步返回原始计数。

    如果要跟踪索引重建期间发生的更改,可以使用IntervalAsynchronousStrategy作为索引重建策略

        <strategies hint="list:AddStrategy">
          <intervalAsyncMaster type="Sitecore.ContentSearch.Maintenance.Strategies.IntervalAsynchronousStrategy, Sitecore.ContentSearch">
            <param desc="database">master</param>
            <param desc="interval">00:00:05</param>
            <!-- whether full index rebuild should be triggered if the number of items in history engine exceeds ContentSearch.FullRebuildItemCountThreshold -->
            <CheckForThreshold>true</CheckForThreshold>
          </intervalAsyncMaster>
        </strategies>
    

    “完整操作索引(非只读)”是什么意思?在重建索引时,您可以继续向Sitecore添加项目,我假设您要添加在重建索引期间添加的任何项目?我希望返回我已添加/更新到搜索结果中的项目。。。在重建过程中,它会在开始重建过程之前返回索引中的“快照”,这是预期的行为。您应该查看不同的索引策略,并利用工作流确保项目已发布。我假设你是通过内容编辑器和代码创建项目的。你看过这篇博文吗?第5步是再次重建索引,从而添加新添加的项目并获得新的正确计数。当然,您可以使用不同的方法来确保增量更新,这样就不需要完全重建。嗨,Zachary,感谢您的回答。。。你的回答对我来说没有多大意义。。。更具体地说,我无法理解如何将锁和事务应用于Sitecore项目,以及这与Lucene索引问题的关系。您是否阅读了SwitchOnRebuildLuceneIndex的文档?你熟悉lucene索引的概念吗?关于使用不同的策略来避免完整索引重建的事实,这不是问题的目的……嗨@Stelio——正如我在回答中所说的,我相信你正在寻找的是不可能的。Sitecore提供了严格结构化数据库的可视化表示。在低级别检查时,索引/添加/计数项只不过是数据库事务。我的回答是为了在低层次上引导你解决你的问题,从而证明为什么我相信你所寻找的是不可能的。无论您尝试执行的操作是否可行,您的预期结果仍然无法达到,因为步骤3和步骤4的结果被交换。正如jammykam在其评论中提到的,为了从新重建的索引中读取项目的完整计数,您必须再次重建索引。底线是,如果您当前正在重建索引,并且在索引重建时添加了一个项,则该项将不在索引中。嗨,Zachary,Lucene索引根本不涉及SQL。。。它基于文件系统,SwitchOnRebuildLuceneIndex只是创建一个不同的文件夹来重建索引,问题是Sitecore历史记录表中的事件没有更新“只读”索引。。。与您正在谈论的事务和锁无关。,,
    ...
        if (IndexCustodian.IsIndexingPaused(this.index))
        {
            CrawlingLog.Log.Debug(string.Format("[Index={0}] IntervalAsynchronousUpdateStrategy triggered but muted. Indexing is paused.", this.index.Name), null);
        }
        else if (IndexCustodian.IsRebuilding(this.index))
        {
            CrawlingLog.Log.Debug(string.Format("[Index={0}] IntervalAsynchronousUpdateStrategy triggered but muted. Index is being built at the moment.", this.index.Name), null);
        }
        else
        {
            CrawlingLog.Log.Debug(string.Format("[Index={0}] IntervalAsynchronousUpdateStrategy executing.", this.index.Name), null);
            HistoryEntry[] history = HistoryReader.GetHistory(this.Database, this.index.Summary.LastUpdated); 
    
    ...