インデックスへのプロパティ フィールドの追加

概要

新しいカスタム プロパティをキーワードとして使用して Sitecore で Commerce アイテムを検索できるように、設定を通じて新しいプロパティ フィールドをインデックスに追加する方法。

Sitecore Experience Commerce (XC) は、デフォルトでカタログ エンティティ プロパティ (すなわち、カタログ、カテゴリ、および販売可能アイテムのプロパティ) にインデックスを付けます。Sitecore インデックスの再構築が呼び出されると、Commerce Engine ミニオンはインデックス付きフィールドを sitecore_web_index および sitecore_master_index に追加します。デフォルトのインデックスは、Commerce コンテンツ アイテム (Habitat カタログ コンテンツ アイテムなど) を Sitecore コンテンツ エディターまたは SXA Storefront で検索する機能を提供します。カスタム フィールドなど、検索する新しいフィールドを追加することで検索インデックスを拡張できます。

検索インデックスに新しい Commerce プロパティ フィールドを導入するには、検索プロバイダーが処理できるフィールド タイプに新しいプロパティ フィールドをマップする必要があります。新しいフィールドをデフォルトの検索フィールド ハンドラーにマップできると仮定すると、コードを記述したり変更したりすることなく、ポリシー セット ファイルの設定を通じてこのマッピングを実現できます。検索プラグインおよび カタログ プラグインは、カタログ プロパティのマッピングに使用されるデフォルトの検索フィールド ハンドラーを定義します。既存のフィールド ハンドラーを使用できない場合は、カスタム フィールド ハンドラーを作成することができます。

新しいフィールドをインデックスにマッピングする際に考慮すべきアプローチが 2 つあります。新しいインデックス フィールドを Commerce エンティティ プロパティに直接マップするか、フィールド ハンドラーの実装を通じて、計算フィールド ( Sorl 動的フィールドなど) を使用することができます。Sitecore が Solr のフィールド名解決の計算フィールドを使用する方法と同様です。

インデックス フィールド タイプへのマッピングを検索プロバイダーのポリシー セット ファイル (PlugIn.Search.Solr.PolicySet.*.json ファイルなど) に定義することにより、新しい Commerce エンティティ プロパティをインデックスに追加します 。このポリシー セット ファイルはデプロイでインデックス作成ロールをホストしている Commerce Engine のインスタンスに存在します (例: C:\inetpub\wwwroot\CommerceMinions_Sc\wwwroot\data\Environments)

ポリシー セット ファイルでは、ItemIndexablePolicy ポリシーが 2 つの主要な設定セクション ("FieldTypeMappers" セクションおよび "Fields" セクション) でインデックス フィールド マッピングを定義します。

FieldTypeMappers 設定

"FieldTypeMappers"セクションでは、の詳細さまざまなデータ型をインデックス フィールドにマップする方法を定義する IndexFieldTypeMapper 設定のコレクションの詳細を示します。PlugIn.Search.Solr.PolicySet.*.json ファイルの次のサンプルは、Web index ("IndexName": "sitecore_web_index") のデフォルトの "FieldTypeMappers" 定義の例を示しています。

"$type": "Sitecore.Commerce.Core.PolicySet, Sitecore.Commerce.Core",
  "Id": "Entity-PolicySet-SolrSearchPolicySet",
  "Version": 1,
  "IsPersisted": false,
  "Name": "SolrSearchPolicySet",
  "Policies": {
    "$type": "System.Collections.Generic.List`1[[Sitecore.Commerce.Core.Policy, Sitecore.Commerce.Core]], mscorlib",
    "$values": [
      {     
      {

        "$type": "Sitecore.Commerce.Plugin.Search.ItemIndexablePolicy, Sitecore.Commerce.Plugin.Search",
        "IndexName": "sitecore_web_index",
        "FieldTypeMappers": [
          {
            "TypeName": "stringCollection",
            "Type": "System.Collections.Generic.List`1[System.String]",
            "NameFormat": "{0}_sm",
            "MultiValued": true
          },
          {
            "TypeName": "textCollection",
            "Type": "System.Collections.Generic.List`1[System.String]",
            "NameFormat": "{0}_txm",
            "MultiValued": true

FieldTypeMappers プロパティ

次の表に、FieldTypeMappers 設定のプロパティの一覧と説明を示します。

プロパティ

説明

"TypeName"

フィールド タイプの名前を定義します。

"Type"

タイプを実装するクラス名を指定します。

"NameFormat"

タイプ名の形式を定義します。

"MultiValued"

1 つのドキュメントにこのフィールド タイプの値が複数含まれるかどうかを示します。

Fields の設定

"Fields" セクションでは、Commerce エンティティまたはコンポーネント プロパティのインデックス フィールドへの実際のマッピングを定義する設定プロパティのコレクションについて詳しく説明します。以下は、PlugIn.Search.Solr.PolicySet.*.json ファイルのデフォルトの "Fields"セクションの例です。

"$type": "Sitecore.Commerce.Core.PolicySet, Sitecore.Commerce.Core",
  "Id": "Entity-PolicySet-SolrSearchPolicySet",
  "Version": 1,
  "IsPersisted": false,
  "Name": "SolrSearchPolicySet",
  "Policies": {
    "$type": "System.Collections.Generic.List`1[[Sitecore.Commerce.Core.Policy, Sitecore.Commerce.Core]], mscorlib",
    "$values": [
     {     
     {
     {
     "FieldTypeMappers": [ 
     "Fields": [
          {
            "$type": "Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration, Sitecore.Commerce.Plugin.Search.Solr",
            "Name": "sxacontent",
            "Type": "System.Collections.Generic.List`1[System.String]",
            "TypeHint": "textCollection",
            "Handler": {
              "$type": "Sitecore.Commerce.Plugin.Catalog.SxaContentFieldHandler, Sitecore.Commerce.Plugin.Catalog"
            }
          },

Fields プロパティ

次の表に、Fields のプロパティの一覧と定義を示します。

プロパティ

定義

"$type"

フィールド タイプを実装するクラス名への参照を指定します。

"Name"

フィールド名を指定します。

"Type"

タイプ形式。

"TypeHint"

渡すことができる値のタイプを定義します。

"Handler"

フィールド ハンドラーを定義するクラスへの参照を指定します。

"Localizable"

フィールドがローカライズ可能な文字列かどうかを指定します。

Commerce エンティティ プロパティをインデックス フィールドにマッピングする方法はたくさんあります。このセクションでは、フィールド マッピングのさまざまな設定例を示します。

マッピング設定は、Solr のポリシー セット ファイル PlugIn.Search.Solr.PolicySet.*.json で定義されています。

以下の例では、インデックス フィールド名 ("DisplayName") と Commerce プロパティ名は同じです。"ValueSource" を指定して Commerce プロパティ名を定義する必要はありません。

{
   "$type":"Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration,
   Sitecore.Commerce.Plugin.Search.Solr",
   "Name":"DisplayName",
   "Type":"System.String"
}

インデックス フィールド名が静的な Commerce エンティティ プロパティ名に直接マップされない場合があります。次に例を示します。

{
  "$type":"Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration, Sitecore.Commerce.Plugin.Search.Solr",
  "Name":"CatalogEntityId",
  "Type":"System.String",
  "ValueSource":{
      "PropertyName":"Id",
      "PropertyPath":""
  }
}

以下に、インデックス フィールド DisplayPropertiesColor"ValueSource". を使用して定義されたコンポーネント表示プロパティにマッピングされる例を示します。

{
  "$type":"Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration,
Sitecore.Commerce.Plugin.Search.Solr",
  "Name":"DisplayPropertiesColor",
  "Type":"System.String",
  "TypeHint":"string",
  "ValueSource": {
      "PropertyName":"Color",
      "PropertyPath":"DisplayPropertiesComponent"
  }
}

以下に、カスタム ハンドラーが指定されている例を示します。

{
   "$type":"Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration,
Sitecore.Commerce.Plugin.Search.Solr",
   "Name":"_UniqueId",
   "Type":"System.String",
   "Handler":{
     "$type":"Sitecore.Commerce.Plugin.Catalog.UniqueIdFieldHandler,
Sitecore.Commerce.Plugin.Catalog"
   }
}

Composer で定義されたプロパティにインデックスを付けるためのポリシー セット設定

Composer テンプレートを使用して、カタログ エンティティのカスタム プロパティを定義するビューを追加する場合 (すなわち、テンプレートをカタログ、カテゴリ、または販売可能アイテム エンティティにリンクする場合)、新しいプロパティ フィールドをインデックスに追加できます。

マッピング設定は、Solr のポリシー セット ファイル PlugIn.Search.Solr.PolicySet.*.json で定義されています。

カタログ プラグインComposerFieldHandler クラスを提供します。このクラスによって、Composer を使用して定義されたカスタム エンティティ プロパティをインデックスに追加できます。Composer フィールド ハンドラーには、"ComposerSource" セクションが含まれています。このセクションは、Composer テンプレート内のビューの名前と、インデックス フィールドにマッピングするカスタム プロパティの名前を指定します。

"Handler": { 
  "$type": "Sitecore.Commerce.Plugin.Catalog.ComposerFieldHandler,
Sitecore.Commerce.Plugin.Catalog",
  "ComposerSource": {
  "ViewName": "MyViewName", 
  "PropertyName": "StringPropertyName"
    }

Composer フィールド ハンドラーの設定パラメーターは次のとおりです。

  • "$type": ComposerFieldHandler を実装するクラス名を指定します。

  • "Viewname": カスタム エンティティ プロパティを定義する子ビュー名を指定します。

  • "PropertyName": 以下を指定します:

注記

Viewname および PropertyName は、カタログ エンティティの子ビューで定義されています。

以下に、文字列データ型として定義されたカスタム カタログ エンティティ プロパティを適切なインデックス フィールド型にマッピングする設定例を示します。

{
 "$type": "Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration,
Sitecore.Commerce.Plugin.Search.Solr",
 "Name": "StringPropertyIndexName",
 "Type": "System.String",
 "Handler": {
   "$type": "Sitecore.Commerce.Plugin.Catalog.ComposerFieldHandler,Sitecore.Commerce.Plugin.Catalog",
   "ComposerSource": {
   "ViewName": "MyViewName",
   "PropertyName": "StringPropertyName"
  }
 }
}

以下に、整数データ型として定義されたカスタム カタログ エンティティ プロパティを適切なインデックス フィールド型にマッピングする設定例を示します。

{ 
 "$type":
"Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration,
Sitecore.Commerce.Plugin.Search.Solr",
 "Name": "IntegerPropertyIndexName",
 "Type": "System.Int64",
 "Handler": {
   "$type": "Sitecore.Commerce.Plugin.Catalog.ComposerFieldHandler, Sitecore.Commerce.Plugin.Catalog",
   "ComposerSource": {
   "ViewName": "MyViewName",
   "PropertyName": "IntegerPropertyName"
  }
 }
}

以下に、10 進数データ型として定義されたカスタム カタログ エンティティ プロパティを適切なインデックス フィールド型にマッピングする設定例を示します。

{
 "$type":
"Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration,
Sitecore.Commerce.Plugin.Search.Solr",
 "Name": "DecimalPropertyIndexName",
 "Type": "System.Decimal",
 "Handler": {
  "$type": "Sitecore.Commerce.Plugin.Catalog.ComposerFieldHandler, Sitecore.Commerce.Plugin.Catalog",
  "ComposerSource": {
    "ViewName": "MyViewName",
    "PropertyName": "DecimalPropertyName"
  }
 }
}

以下に、DateTimeOffSet データ型として定義されたカスタム カタログ エンティティ プロパティを適切なインデックス フィールド型にマッピングする設定例を示します。

{
 "$type":
"Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration,
Sitecore.Commerce.Plugin.Search.Solr",
 "Name": "DateTimeOffsetPropertyIndexName",
 "Type": "System.DateTimeOffset",
 "Handler": {
   "$type": "Sitecore.Commerce.Plugin.Catalog.ComposerFieldHandler,Sitecore.Commerce.Plugin.Catalog",
   "ComposerSource": {
     "ViewName": "MyViewName",
     "PropertyName": "DateTimeOffsetPropertyName"
  }
 }
}

以下に、ブール値データ型として定義されたカスタム カタログ エンティティ プロパティを適切なインデックス フィールド型にマッピングする設定例を示します。

{
 "$type":
"Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration,
Sitecore.Commerce.Plugin.Search.Solr",
 "Name": "BooleanPropertyIndexName",
 "Type": "System.Boolean",
 "Handler": {
  "$type": "Sitecore.Commerce.Plugin.Catalog.ComposerFieldHandler, Sitecore.Commerce.Plugin.Catalog",
  "ComposerSource": {
    "ViewName": "MyViewName",
    "PropertyName": "BooleanPropertyName"
    }
  }

Solr 検索プロバイダーを使用していて、フィールドを使用して検索する機能を実現する場合は、新しいフィールドとデータ型を定義する設定パッチ ファイルを作成する必要があります。構成ファイルを /App_Config/Include/Z.Commerce.Engine フォルダーに追加します。次に、設定パッチ ファイルの例を示します。

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:search="http://www.sitecore.net/xmlconfig/search/" xmlns:role="http://www.sitecore.net/xmlconfig/role/">

  <sitecore role:require="Standalone or ContentDelivery or ContentManagement" search:require="solr">
    <contentSearch>
      <indexConfigurations>
        <defaultSolrIndexConfiguration type="Sitecore.ContentSearch.SolrProvider.SolrIndexConfiguration, Sitecore.ContentSearch.SolrProvider">
          <fieldMap type="Sitecore.ContentSearch.SolrProvider.SolrFieldMap, Sitecore.ContentSearch.SolrProvider">
            <fieldNames hint="raw:AddFieldByFieldName">
              <field fieldName="stringpropertysolr" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" returnType="string" settingType="Sitecore.ContentSearch.SolrProvider.SolrSearchFieldConfiguration, Sitecore.ContentSearch.SolrProvider"/>
            </fieldNames>
          </fieldMap>
        </defaultSolrIndexConfiguration>
      </indexConfigurations>
    </contentSearch>
  </sitecore>
</configuration>