2016-05-21 23 views
2

重建索引在我的Sitecore的情況下,我有2個模板,產品產品類別內容。產品有一個多重列表,鏈接到產品類別作爲查找。產品還具有索引計算字段設置,可根據選定的產品類別預先計算一些數據。因此,當用戶更改產品時,Sitecore的索引策略會將產品與計算字段進行索引。Sitecore的:編程方式觸發的相關內容

我的問題是,當用戶更改產品類別中的數據時,我希望Sitecore將所有相關產品重新編入索引。我不知道如何做到這一點。我沒有看到任何鉤在哪裏可以檢測到一個產品類別被索引,所以我可以以編程方式觸發指數產品

感謝

回答

1

一種方法是添加自定義OnItemSave處理程序將檢查已更改項目的模板具有產品類別模板,並且會觸發索引更新。

要只重新索引更改的項目,你可以攝取相關的產品,通過使用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/

+0

這將如何在Web數據庫/ CD上工作?使用您的解決方案,在智能發佈後,onItemSave不會在ProductCategories – webber

+0

上觸發是的,但您只使用OnItemSave在Sitecore HistoryEngine中註冊更改。智能發佈不應該挑選並觸發reindex? –

+0

我喜歡你的建議,特別是如此簡潔。我會給它一個鏡頭,讓你知道它是如何工作的! – webber

0

您可以添加或更改現有索引更新策略之一。 (配置\ Sitecore的\ contentSearch \ indexConfigurations \ indexUpdateStrategies配置節點)

至於例如,你可以採取

Sitecore.ContentSearch.Maintenance.Strategies.SynchronousStrategy

一件事,你需要改變

public void Run(EventArgs args, bool rebuildDescendants) 

方法。 參數包含更改的項目引用。所有你需要的,觸發相關項目索引的更新。

自定義更新策略後,您應該將其添加到您的索引,策略配置節點。

3

您可以使用indexing.getDependencies管道來實現。向它添加一個處理器 - 您的自定義類應該從Sitecore.ContentSearch.Pipelines.GetDependencies.BaseProcessor派生並覆蓋Process(GetDependenciesArgs context)

在這個函數中,你可以得到你的IndexedItem,並根據這些信息將其他項添加到Dependencies。這些依賴關係也將被編入索引。這種工作方式的好處是,相關項目將在同一個工作中被索引,而不是調用新的工作來更新它們。

只要知道性能問題,可能會導致寫入錯誤,因爲此代碼將在所有索引上調用。如果不適用,儘快離開功能。

有關此管道的一些已知問題可在kb上找到。

+0

Moe info here:http://ggullentops.blogspot.be/2016/06/sitecore-index-dependencies.html – Gatogordo

相關問題