如何在Sitecore项目创建之后以编程方式暂停,直到更新索引

时间:2013-03-26 13:25:24

标签: indexing sitecore

一位同事问了这个问题,我没有立即找到解决方案,所以我在这里张贴。他以编程方式在主DB中插入Sitecore项,然后必须插入另一个项,该项依赖于索引中存在的第一个项。他最初每次或两次都有第二个项目插入失败,但后来在他的代码中插入了一个手动暂停,试图让索引时间赶上,现在它几乎每十分钟就失败一次。更好,但不完美。

他正在寻找是否有Sitecore方法来检查索引是否已经更新,然后再继续插入依赖项。

我确实找到了Alex Shyba(http://sitecoreblog.alexshyba.com/2011/04/search-index-troubleshooting.html)发布的这篇博文,看起来它可能有一些适用性,但我的同事严格在主数据库中工作(没有涉及出版),我们已经有了Alex在我们的解决方案中实现的文章中的前几个步骤(我没有完成整个过程)。

3 个答案:

答案 0 :(得分:2)

如果依赖于索引添加,最后确保项目在索引中的唯一方法是在异步索引更新之后执行操作。在Sitecore 6中,我所知道的唯一方法就是database:propertychanged eventAlex Shyba describes this event in another article,关于HTML缓存清除。

您的挑战可能是在事件处理程序中知道插入了哪个项目,以及如何处理它。您需要某种全局数据结构来传递此状态信息,因为索引更新作为异步作业运行。

其他选项(可能更容易)是删除对索引更新的依赖(使用Sitecore查询或快速查询),或者轮询索引直到该项存在(这有点难看)。

答案 1 :(得分:2)

为什么不自己添加索引项?这样UI就会被阻止,直到完成。

您可以通过挂钩项目来执行此操作:已保存的事件。我认为事件处理程序将基于数据库爬虫的代码

答案 2 :(得分:0)

您是否考虑将第二个任务排队为“定时任务”,并使用一些包装来检查依赖关系并在必要时重新排队?见http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/11/All-About-Sitecore-Scheduling-Agents-and-Tasks.aspx