我有一个Sitecore应用程序,它通过Sitecore的内置API创建和使用许多Lucene索引。
我需要确保索引中的项目在发布时保持最新。为此,我创建了一个Sitecore Hook,用于检测何时将项目保存到“web”数据库并重新索引项目。它似乎在很大程度上起作用,但似乎不时会莫名其妙地失败。
我在钩子中的代码如下:
item.Database.Indexes.RemoveItem(item, true);
item.Database.Indexes.UpdateItem(item);
以前有人试过这个并有更好的解决方案吗?
答案 0 :(得分:4)
HistoryEngine配置代码段:
<Engines.HistoryEngine.Storage>
<obj type="Sitecore.Data.$(database).$(database)HistoryStorage, Sitecore.Kernel">
<param connectionStringName="$(id)" />
<EntryLifeTime>30.00:00:00</EntryLifeTime>
</obj>
</Engines.HistoryEngine.Storage>
根据this SDN document (PDF),每次Sitecore对项目进行更改时,它都会向数据库表中添加记录。但是,默认情况下,除非您在web.config的<database>
部分中为要编制索引的数据库中包含上述代码段,否则Sitecore将不会执行此操作。
答案 1 :(得分:1)
我可能会考虑将Sitecore历史引擎挂钩到您的“网络”数据库,因为它已经是“主”。通过这种方式,更改内容的索引将自动发生。
我现在不在电脑上,我可以提供完整的示例,但您应该能够在web.config中的“master”数据库定义下找到所需的配置。
答案 2 :(得分:0)
如果您运行Sitecore的单个实例来为您的站点提供服务,则在发布项目时,Web数据库上的Lucene索引会自动更新。 [编辑:在阅读了Kyle在其答案中链接的文档后,我将仔细检查这不依赖于历史引擎,我将其作为一个问题添加到项目中当然]
如果您运行旧版本的Sitecore(6.2或更低版本)并使用暂存模块来维护一个/多个前端服务器和创作服务器,那么您需要添加HistoryEngine
在Web数据库(或您正在使用的任何发布目标)上,并将Indexing.ServerSpecificProperties
设置为true
(我不确定此设置的引入版本 - 如果您没有看到它那你应该考虑升级,如果可能的话。)
如果您正在运行Sitecore 6.3或更高版本,我相信(我还没有对此进行测试)CD实例应该在从CM服务器发布后自动重新索引内容,就好像它是单个实例到期一样到事件联合。我稍后会查看。
对于任何想知道HistoryEngine
是什么的人来说,它实际上只是一个非常简单的日志,记录了数据库中的变化以及何时变化。每当事情发生变化时,事件都会记录在那里。这允许6.3之前的实例在与内容创作实例断开连接时保持对更改内容的处理。如果您很好奇,请启用它并查看数据库中的History表。