Sitecore:以编程方式触发相关内容的重建索引

时间:2016-05-21 20:56:47

标签: lucene sitecore

在我的sitecore实例中,我有2个模板的内容,产品产品类别。这些产品有一个多列表,可以链接到产品类别作为查找。产品还具有索引计算字段设置,可根据所选产品类别预先计算某些数据。因此,当用户更改产品时,Sitecore的索引策略会使用计算字段对Product进行索引。

我的问题是,当用户更改产品类别中的数据时,我希望Sitecore重新索引所有相关产品。我不知道该怎么做。我没有看到任何可以检测到产品类别被编入索引的钩子,所以我可以通过编程方式触发产品索引

由于

3 个答案:

答案 0 :(得分:3)

您可以使用indexing.getDependencies管道。添加处理器 - 您的自定义类应来自Sitecore.ContentSearch.Pipelines.GetDependencies.BaseProcessor并覆盖Process(GetDependenciesArgs context)

在此函数中,您可以获取IndexedItem,并根据此信息将其他项添加到依赖项。这些依赖项也将被编入索引。这种工作方式的好处是,依赖项目将在同一作业中编入索引,而不是调用新作业来更新它们。

请注意,如果写入错误,可能会导致性能下降,因为将在所有索引上调用此代码。如果不适用,请尽快退出该功能。

有关此管道的一些已知问题可在kb上找到。

答案 1 :(得分:1)

一种方法是添加自定义OnItemSave处理程序,该处理程序将检查已更改项目的模板是否具有 ProductCategory 模板,并且会有问题地触发索引更新。

要仅重新索引已更改的项目,您可以使用HistoryEngine.RegisterItem方法拾取相关产品并在HistoryEngine中注册它们:

Sitecore.Context.Database.Engines.HistoryEngine.RegisterItemSaved(myItem, new ItemChanges(myItem));

有关如何创建OnItemSave处理程序的一些有用说明,请访问:https://naveedahmad.co.uk/2011/11/02/sitecore-extending-onitemsave-handler/

答案 2 :(得分:0)

您可以添加或更改现有索引更新策略之一。 ( configuration \ sitecore \ contentSearch \ indexConfigurations \ indexUpdateStrategies 配置节点)

例如你可以

  

Sitecore.ContentSearch.Maintenance.Strategies.SynchronousStrategy

有一件事,你需要改变

public void Run(EventArgs args, bool rebuildDescendants)

方法。 args 包含已更改的项目引用。您需要的所有内容,都会触发相关项目索引的更新。

拥有自定义更新策略后,您应将其添加到索引策略配置节点。

相关问题