在我的sitecore实例中,我有2个模板的内容,产品和产品类别。这些产品有一个多列表,可以链接到产品类别作为查找。产品还具有索引计算字段设置,可根据所选产品类别预先计算某些数据。因此,当用户更改产品时,Sitecore的索引策略会使用计算字段对Product进行索引。
我的问题是,当用户更改产品类别中的数据时,我希望Sitecore重新索引所有相关产品。我不知道该怎么做。我没有看到任何可以检测到产品类别被编入索引的钩子,所以我可以通过编程方式触发产品索引
由于
答案 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 包含已更改的项目引用。您需要的所有内容,都会触发相关项目索引的更新。
拥有自定义更新策略后,您应将其添加到索引策略配置节点。