Search Sitecore 7.2中带Lucene的可热交换索引
我正在试验新的Sitecore 7.2功能SwitchOnRebuildLuceneIndex 显然,此功能允许我在重建索引的同时,以只读模式访问我的索引 在我重建索引的同时,有没有办法拥有一个完整的操作索引(不是只读的) 我正在执行的测试如下: 1) 用30k个项目重建自定义索引(需要30秒) 2) 同时索引正在重建:添加Sitecore项目(通过代码) 3) 同时索引重建:访问自定义索引(通过代码)以获取项目的计数 4) 索引完成重建后:访问自定义索引(通过代码)以获取项目计数 在步骤3中,它返回原始项目计数30000 在步骤4中,它返回更新的项目计数30001 谢谢你的帮助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本质上是一种软件,它使数据库更加用户友好,并定义了一种技术人员和非技术人员都能理解和遵循的结构。您所谈论的内容与、数据库和的概念背道而驰。我在下面的步骤内联注释中添加了更多技术(数据库)注释:
因此,第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);
...