チュートリアル: カスタム インデックス フィールド ハンドラーの作成

概要

検索対象の新しいインデックス フィールドに適したハンドラー タイプが、デフォルトの Search プラグインによって提供されていない場合に、カスタム フィールド ハンドラー クラスを作成する方法。

検索対象の新しいインデックス フィールドに適したハンドラー タイプが、デフォルトの Search プラグインによって提供されていない場合は、カスタム フィールド ハンドラー クラスを作成できます。このチュートリアルでは、以下の方法について説明します。

  • 新しいフィールド ハンドラーを作成して、新しいフィールドにインデックス付けする。

  • Commerce Engine Connect 検索プロバイダー設定に新しいフィールドを追加して、Sitecore で検索できるようにします。

新しいフィールド ハンドラーを作成して、新しいフィールドにインデックス付けする

カスタム インデックス フィールド用の新しいフィールド ハンドラーを作成するには:

注記

検索フィールド ハンドラーの現在のアーキテクチャでは、パイプラインまたはコマンドのインスタンスを解決することはできません。ハンドラーが必要とする値をコンテキストに追加する必要があります。

  1. Sitecore.Commerce.Plugin.Search.AbstractIndexFieldHandler クラスから継承するクラスを作成し、次の例に示すように、ComposeValue メソッドを実装します。

    public class CustomFieldHandler : AbstractIndexFieldHandler
    {
      /// <inheritdoc />
       public override object ComposeValue(object source, ConcurrentDictionary<string, object> context)
       {
    	if (context == null || source == null || !(source is CatalogItemBase entity))
    	{
    	   return null;
    	}
    	return $"Custom field handler value: {entity.Id}";
       }
    }
  2. カスタム フィールド ハンドラーを検索インデックスに登録するには、デプロイで使用される検索プロバイダーに対応した検索ポリシー セットにそのカスタム フィールド ハンドラーを追加する必要があります。Solr 用のポリシー セット (PlugIn.Search.Solr.PolicySet-1.0.0.json) には、Sitecore.Commerce.Plugin.Search.ItemIndexablePolicy, Sitecore.Commerce.Plugin.Search の各タイプの 2 種類のポリシーが含まれています。これらのポリシーは、接続された Sitecore XP サイトの Master データベースと Web データベースを表します。新しいハンドラーを登録し、コンテンツが Master データベースと Web データベースの両方でインデックス付けされるようにするには、両方のインデックスについて、“Fields” コレクションでカスタム フィールド ハンドラーを追加します。

    PlugIn.Search.Solr.PolicySet-1.0.0.json ファイルに追加されたカスタム Solr フィールド ハンドラー ("Company.Project.Search.CustomFieldHandler, Company.Project") の例は、以下に示すとおりです。

    {   
        "$type": "Sitecore.Commerce.Plugin.Search.ItemIndexablePolicy,
    Sitecore.Commerce.Plugin.Search", 
        "IndexName": "sitecore_web_index",
        "FieldTypeMappers": [
            …
        ],
        "Fields": [
           {
               "$type":
    "Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration,
    Sitecore.Commerce.Plugin.Search.Solr",
               "Name":
    "customfield",
               "Type":
    "System.String",
               "Handler": {
                   "$type": "Company.Project.Search.CustomFieldHandler, Company.Project"
                }
            }
        ]
    }
  3. 設定を変更したら、Commerce Engine 環境をブートストラップして、変更を適用します。

  4. Microsoft IIS Manager で、Commerce Engine ミニオン サービス (CommerceMinions_Sc) を再起動します。

  5. Sitecore XP のインデックスの手動での再構築。インデックスを再構築すると、次の例に示すように、新しい検索ハンドラーが検索インデックスに表示されます。

    新しい検索ハンドラーが検索インデックスに表示されている。

Commerce Engine Connect 検索プロバイダー設定への新しいフィールドの追加

新しいフィールドを Sitecore で検索できるようにするには、Commerce Engine Connect の検索プロバイダー設定に追加する必要があります。

Commerce Engine Connect の検索プロバイダー設定に新しいフィールドを追加するには:

  1. Sitecore サービス インスタンスの \App_Config\Include\Y.Commerce.Engine フォルダーで、検索プロバイダーの設定ファイルを開きます。たとえば、Solr の場合は Sitecore.Commerce.Engine.Connectors.Index.Solr.config ファイルを開きます。

  2. FieldMap セクションで、新しい fieldName 定義を追加します。次の例では、"customfield" という名前の新しいフィールドを追加しています。

    <field fieldName="customfield" storageType="YES" indexType="UN_TOKENIZED" vectorType="NO" boost="1f" returnType="string" settingType="Sitecore.ContentSearch.SolrProvider.SolrSearchFieldConfiguration, Sitecore.ContentSearch.SolrProvider"/>
    
  3. 変更を保存し、Commerce Engine をブートストラップします。