2012-08-09 70 views
6

我正在玩SDL Tridion 2011(GA)的自定義搜索索引處理程序。我有一些工作,使用very helpful information provided by Arjen,但我不確定我的執行是否是最佳選擇。自定義Tridion搜索索引處理程序:頁面url的自定義vs標準字段?

要求是能夠通過url在CMS中搜索頁面(例如www.example.com/news/index.html)。爲了做到這一點,我創建了一個使用ISearchIndexingHandler界面的類(下面的代碼)。我正在索引項目的ContentText字段中的url,但是我不確定這是否通常包含頁面的其他內容(我認爲一個頁面只有元數據,所以這應該是好的)。使用此自定義字段的優點是,我可以簡單地在搜索框中鍵入url,而無需使用<url> IN <fieldname>或類似的東西。

所以我的問題是,是否有任何理由不使用ContentText的頁面,並有使用自定義字段的任何優勢?此外,獎勵標誌會告訴任何有關如何處理BluePrinting的好主意的人(如果我在父發佈中創建頁面,我還希望本地url也在子出版物中編入索引),以及結構組路徑被更改的情況(我想我可以以某種方式在我的索引處理程序中觸發子頁面項的重新索引)。

代碼:

using System; 
using Tridion.ContentManager.Search; 
using Tridion.ContentManager.Search.Indexing.Handling; 
using Tridion.ContentManager.Search.Indexing.Service; 
using Tridion.ContentManager.Search.Indexing; 
using Tridion.ContentManager.Search.Fields; 

namespace ExampleSearchIndexHandler 
{ 
    public class PageUrlHandler : ISearchIndexingHandler 
    { 
     public void Configure(SearchIndexingHandlerSettings settings) 
     {    
     } 

     public void ExtractIndexFields(IdentifiableObjectData subjectData, Item item, CoreServiceProxy serviceProxy) 
     { 
      PageData data = subjectData as PageData; 
      if (data != null) 
      { 
       PublishLocationInfo info = data.LocationInfo as PublishLocationInfo; 
       string url = GetUrlPrefix(data) + info.PublishLocationUrl; 
       item.ContentText = url; 
      } 
     } 

     private string GetUrlPrefix(PageData page) 
     { 
      //hardcoded for now, but will be read from publication metadata 
      return "www.example.com"; 
     } 
    } 
} 

回答

5

可以存儲在ContextText資源網址。 Thies字段用於索引模板內容數據。

Tridion不索引兒童出版物的共享項目。

在修改項目(創建,更新,刪除,本地化和取消本地化)時會觸發索引。 或者你可以使用reindexing工具來重新索引你的物品。但是沒有辦法爲子出版物中的共享項目建立索引。

3

我不認爲你可以在搜索查詢中包含URL前綴作爲索引項。由於共享項目沒有編入索引,因此您可能會從「網站結構」層次對該頁面編制索引,該層次永遠不會發布。

當一個結構組被移動時,你將不得不製作一個事件處理程序,它觸發使用受保護的TOM.NET API方法重新索引所有子頁面。這種方法不是公共API的一部分,所以發佈該解決方案的代碼可能會聲明我是一個不受歡迎的人R & D :)

在您重新編制索引之前,您應該存儲原始發佈位置url TcmEventArgs.ContextVariables屬性中的結構組,因此您可以驗證是否需要重新編制索引操作。

+0

關於只有在SG發佈URL發生變化時觸發重新索引的好處 - 這可以避免一些大型網站的重新索引。由於SG沒有版本控制,我想唯一的辦法就是在你說的事件系統中。 – Will 2012-08-10 09:13:20

+0

是的,你的編輯是正確的。我的意思是結構組而不是頁面。 – 2012-08-12 08:10:21