6

私はSDLTridion2011(GA)のカスタム検索インデックスハンドラーで遊んでいました。Arjenから提供された非常に役立つ情報を使用して、何かが機能するようになりましたが、自分の実行が最良のオプションであるかどうかはわかりません。

要件は、URL(www.example.com/news/index.htmlなど)でCMSのページを検索できるようにすることです。これを行うために、ISearchIndexingHandlerインターフェイス(以下のコード)を使用してクラスを作成しました。アイテムのContentTextフィールドのURLにインデックスを付けていますが、これに通常はページの他の何かが含まれるかどうかはわかりません(ページにはメタデータしかないので、これで問題ありません)。カスタムフィールドに対してこれを使用する利点は、<url> IN <fieldname>などを使用せずに、検索ボックスに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";
        }
    }
}
4

2 に答える 2

5

ContextText プロパティに URL を格納できます。このフィールドは、テンプレート コンテンツ データのインデックス作成に使用されます。

Tridion は、子出版物の共有アイテムを索引付けしません。

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

于 2012-08-09T11:19:40.437 に答える
3

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

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

インデックスを再作成する前に、構造グループの元の公開場所のURLをTcmEventArgs.ContextVariablesプロパティに保存して、インデックスの再作成が必要かどうかを確認できるようにする必要があります。

于 2012-08-10T07:51:57.403 に答える