2010-09-14 40 views
2

我有一個Sitecore的應用程序,創建並使用大量的Lucene索引通過Sitecore的內置API。保持Sitecore的Lucene索引跟上時代的

我需要確保的是,在指數項跟上最新發布時,。爲此,我創建了一個Sitecore Hook,用於檢測何時和項目保存到「Web」數據庫並重新編制項目。它似乎在大多數情況下工作,但似乎無時無刻不會失敗。

我在掛鉤的代碼如下所示:

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

有誰之前試試這個,有一個更好的解決辦法?

回答

1

我可能會考慮掛鉤Sitecore的歷史引擎到您的「網絡」數據庫,因爲它已經是「主人」。通過這個,改變內容的索引將自動發生。

我不是在PC上,現在,我可以拉起一個完整的例子,但你應該能夠找到你的web.config「主」數據庫的定義下,你所需要的配置。

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的進行了更改的項目,它增加了一個記錄到數據庫表。但是,默認情況下,Sitecore不會執行此操作,除非您在要設置索引的數據庫的web.config的<database>部分中包含上述代碼段。

+0

這到底是什麼?詳細說明如果你想要任何投票! – 2011-01-10 20:11:17

0

如果您正在運行Sitecore的單一實例來爲你的網站,然後當一個項目被髮布在網絡數據庫上了Lucene索引自動更新。 [編輯:在閱讀了Kyle在他的回答中鏈接的文檔之後,我將再次檢查這不依賴於歷史引擎,我將其添加到項目當然]

如果您運行的是舊版本的Sitecore(6.2或更低版本)並且正在使用分段模塊來維護一個/幾個前端服務器和一個創作服務器,那麼您需要在網絡數據庫(或無論您使用的發佈目標是什麼),並將Indexing.ServerSpecificProperties設置爲true(我不確定該設置的版本是什麼版本 - 如果您沒有看到它,那麼您應該考慮升級)。

如果您正在運行Sitecore 6.3或更高版本,我相信(並且我還沒有測試過),CD實例應該在CM服務器發佈後自動重新索引內容,就好像它是單個實例由於事件整合。我會在稍後檢查。

對於任何人想知道HistoryEngine是什麼,它真的只是一個很簡單的日誌什麼在數據庫中,當發生了變化。無論什麼時候改變,事件都會記錄在那裏。這使得6.3之前的實例可以處理與內容創作實例斷開連接時更改的內容。如果您好奇,啓用它並查看數據庫中的歷史記錄表。