2012-08-09 9 views
6

私は、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"; 
     } 
    } 
} 

答えて

5

あなたはContextTextプロパティでURLを保存することができます。 Thiesフィールドは、テンプレートのコンテンツデータのインデックスに使用されます。

Tridionは、子の出版物の共有アイテムのインデックスを作成しません。

アイテムの変更(作成、更新、削除、ローカライズ、ローカライズ解除)でインデックスが作成されます。 また、再索引ツールを使用して、再索引項目を使用することもできます。子のパブリケーションで共有アイテムにインデックスを付ける方法はありません。

3

URLプレフィックスをいずれの検索クエリにもインデックスされたアイテムとして含めることはできません。共有アイテムはインデックスに登録されていないため、おそらく公開されていないウェブサイト構造レイヤからページをインデックス付けすることになります。

構造体グループを移動すると、TOM.NET APIの保護されたメソッドを使用して、すべての子ページの再インデックスをトリガするイベントハンドラを作成する必要があります。このメソッドはパブリックAPIの一部ではないため、そのソリューションのコードを投稿すると、恐らくR & D:

と非公開のPersonaが宣言されます。インデックスを再作成する前に、元の公開ロケーションのURL TcmEventArgs.ContextVariablesプロパティのStructure Groupを使用して、再インデックス処理が必要かどうかを確認することができます。

+0

SG公開URLが変更された場合にのみ再インデックスを開始することについての良い点 - これは、大規模なサイトのインデックスの再作成を避けることができます。 SGはバージョン管理されていないので、これを行う唯一の方法はあなたのようなイベントシステムにあると思います。 – Will

+0

はい、編集が正しいです。私はページの代わりに構造グループを意味しています。 –

関連する問題