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

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Sitecore Experience Commerce (XC) は、デフォルトでカタログ エンティティ プロパティ (つまり、カタログ、カテゴリ、販売可能商品のプロパティ) をインデックス化します。 Sitecoreインデックスの再構築 が呼び出されると、Commerce Engineミニオンはインデックス付きフィールドをsitecore_web_indexsitecore_master_indexに追加します。デフォルトのインデックスでは、Sitecoreコンテンツ エディターやSXAストアフロントでCommerceコンテンツ アイテム (Habitatカタログ コンテンツ アイテムなど) を検索できます。検索インデックスを拡張するには、カスタム フィールドなど、検索する新しいフィールドを追加します。

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

検索ポリシー・セット・ファイル内の索引フィールド・マッピング定義

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

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

ポリシー・セット・ファイルでは、ItemIndexablePolicyポリシーによって、"FieldTypeMappers" セクションと "Fields" セクションの2つの主要な構成セクションでインデックス・フィールド・マッピングが定義されます。

FieldTypeMappersの設定

"FieldTypeMappers"セクションでは、さまざまなデータ型をインデックス フィールドにマップする方法を定義するIndexFieldTypeMapper構成のコレクションについて詳しく説明します。次のPlugIn.Search.Solr.PolicySet.*.jsonファイルのサンプルは、Webインデックス ("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"セクションでは、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のプロパティの一覧と定義を示します。

財産

定義

"$type"

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

"Name"

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

"Type"

型の形式。

"TypeHint"

渡すことができる値の種類を定義します。

"Handler"

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

"Localizable"

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

ポリシー・セットの構成例

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

マッピング構成は、Solrポリシー・セット・ファイル・ PlugIn.Search.Solr.PolicySet.*.jsonで定義します。

インデックス フィールド名とエンティティ プロパティが同じ1:1マッピングの例

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

{
   "$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で定義します。

Composerフィールド ハンドラー

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

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

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

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

  • "Viewname": ユーザー定義エンティティのプロパティを定義する子ビューの名前を指定します。

  • "PropertyName": インデックス フィールドにマップするユーザー定義エンティティ プロパティの名前を指定します。

メモ

ViewnamePropertyNameは、カタログエンティティの子ビューで定義されているものです。

Composer文字列プロパティのマッピングの例

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

{
 "$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"
  }
 }
}

Composerの整数プロパティのマッピングの例

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

{ 
 "$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"
  }
 }
}

Composerのdecimalプロパティのマッピングの例

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

{
 "$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"
  }
 }
}

ComposerのDateTimeOffSetプロパティのマッピングの例

次に、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"
  }
 }
}

ComposerのBooleanプロパティのマッピングの例

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

{
 "$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設定の更新

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>
この記事を改善するための提案がある場合は、 お知らせください!