私は、SDL Tridion 2011(GA)のカスタム検索インデックス作成ハンドラで遊んでいました。私はvery helpful information provided by Arjenを使って何か作業していますが、実行が最良の選択肢かどうかはわかりません。カスタマイズされたTridion検索インデックスハンドラ:カスタムURLとページURLの標準フィールド?
URLでCMS内のページを検索する必要があります(例:www.example.com/news/index.html)。これを行うために、私はISearchIndexingHandler
インターフェイス(以下のコード)を使ってクラスを作成しました。私はアイテムのContentTextフィールドにURLをインデックスしていますが、これは通常、ページには他のものが含まれているかどうかわかりません(ページにはメタデータしかないので、これはOKです)。これをカスタムフィールドと比較した場合の利点は、<URL> IN <フィールド名>などのような検索ボックスにURLを入力するだけで済みます。
私の質問は、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
はい、編集が正しいです。私はページの代わりに構造グループを意味しています。 –