我正在玩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";
}
}
}
關於只有在SG發佈URL發生變化時觸發重新索引的好處 - 這可以避免一些大型網站的重新索引。由於SG沒有版本控制,我想唯一的辦法就是在你說的事件系統中。 – Will 2012-08-10 09:13:20
是的,你的編輯是正確的。我的意思是結構組而不是頁面。 – 2012-08-12 08:10:21