使Sitecore Lucene索引保持最新状态

时间:2010-09-14 19:37:28

标签: .net lucene lucene.net sitecore

我有一个Sitecore应用程序,它通过Sitecore的内置API创建和使用许多Lucene索引。

我需要确保索引中的项目在发布时保持最新。为此,我创建了一个Sitecore Hook,用于检测何时将项目保存到“web”数据库并重新索引项目。它似乎在很大程度上起作用,但似乎不时会莫名其妙地失败。

我在钩子中的代码如下:

item.Database.Indexes.RemoveItem(item, true);
item.Database.Indexes.UpdateItem(item);

以前有人试过这个并有更好的解决方案吗?

3 个答案:

答案 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表。