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

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

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

Sitecoreインデックスの再構築が呼び出されると、Commerce Engineインデックス ミニオンはインデックス化されたフィールドをsitecore_web_indexsitecore_master_indexに追加して、Sitecoreコンテンツ エディターまたはSXAストアフロントでカタログ コンテンツ アイテム (Habitatカタログ コンテンツ アイテムなど) の検索を有効にします。

Commerce Engineには、カタログ エンティティ フィールドをインデックス フィールド タイプにマップするために必要なコンフィギュレーション プロパティを定義する既定の インデックス フィールド ハンドラー が多数実装されています。検索インデックスに新しいカタログ・プロパティ・フィールドを導入するには、適切なフィールド・ハンドラ構成をPlugIn.Search.Solr.PolicySet.*.json ・ファイルに追加する必要があります。新しいフィールドを既存のカタログ フィールド ハンドラーの1つにマップできると仮定すると、コードを記述したり変更したりする必要はありません。既存のフィールド ハンドラーの1つを使用してカスタム カタログ アイテム フィールドにインデックスを作成できない場合は、それをサポートする カスタム フィールド ハンドラーを作成できます

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

新しいフィールドをインデックスにマッピングする際には、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"セクションでは、さまざまなCommerce Engineデータ型をSorlインデックスフィールドタイプにマッピングする方法を定義する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
          },
          {
            "TypeName": "text",
            "Type": "System.String",
            "NameFormat": "{0}_t",
            "CultureFormat": "_{1}"

FieldTypeMappersプロパティ

FieldTypeMappersの構成プロパティは次のとおりです。

プロパティ

形容

"TypeName"

Commerce Engineで使用されるフィールド タイプの名前。.

"Type"

システムの種類を実装するクラス名を指定します。

"NameFormat"

of形式と型名を定義します。

"CultureFormat"

該当する場合にローカライズのカルチャを指定するために使用される形式を定義します。

"MultiValued"

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

フィールドの設定

SolrIndexFieldConfigurationクラスは、"Fields" 構成のプロパティを定義します。.jsonファイルの"Fields"セクションでは、CommerceエンティティまたはコンポーネントプロパティをSolrインデックスフィールドにマップする構成プロパティのコレクションについて詳しく説明します。次に、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"

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

"ValueSource"

インデックス フィールド名にマッピングするSitecoreのCommerceプロパティの名前 ("PropertyName") を指定します。また、該当する場合は、プロパティを定義するコンポーネント クラスを指定する "PropertyPath" 値も取ります。

"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エンティティ プロパティ名に直接マップされない場合があります。次の例では、インデックス フィールド名 "CatalogEntityId" は、"ValueSource"で指定された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テンプレートを使用してCatalogエンティティのカスタムプロパティを定義するビューを追加する場合 (つまり、テンプレートをカタログ、カテゴリ、または選択可能なアイテムエンティティにリンクする場合)、ComposerFieldHandlerを使用して新しいプロパティフィールドをインデックスに追加します。

メモ

リッチ テキスト値を使用するカスタム プロパティのインデックスを作成すると、すべての書式設定情報が削除されます。テキストベースの検索をサポートするために、未加工のテキスト値のみがインデックス化されます。

composerフィールド ハンドラ設定を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"
    }

ComposerFieldHandlerインデックスフィールドハンドラのプロパティ

Composerフィールド ハンドラには "ComposerSource" Composerビューの名前と、インデックスを作成するカスタム プロパティの名前を指定するプロパティが含まれています。次の表に、ComposerFieldHandlerの設定プロパティの一覧と説明を示します。

財産

形容

"$type"

を実装するクラス名を指定します。 ComposerFieldHandler

"Viewname"

Composerのユーザー定義エンティティ プロパティを含む子ビューの名前を指定します。

"PropertyName"

インデックスフィールドにマップするカスタムComposerエンティティプロパティの名前を指定します。

手記

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

Sitecore固有のカタログ アイテム フィールドをインデックスに追加する

SitecoreでSellable商品テンプレートにカスタム フィールドを追加する 場合、または既存のSitecore固有の商品フィールドの値を設定する場合、これらのカスタムSitecore商品フィールドはSitecoreにのみ存在します。Commerce Engine側では、これらのSitecore固有のフィールドはExternalSettingsComponents.Sitecore XCは、Commerce EngineがSitecore固有のカタログ アイテム フィールドをインデックスに追加するように設定できるExternalSettingsFieldHandlerハンドラーを実装します。

External Settingsフィールドハンドラ

Commerce Engineカタログ プラグイン は、Sitecore固有のカタログ アイテム プロパティを検索インデックスに追加できるExternalSettingsFieldHandlerクラスを提供します。

次に、PlugIn.Search.Solr.PolicySet.*.jsonに追加するExternalSettingsFieldHandler設定の例を示します。

{
  "$type": "Sitecore.Commerce.Plugin.Search.ItemIndexablePolicy, Sitecore.Commerce.Plugin.Search",
  "IndexName": "sitecore_master_index",
  "FieldTypeMappers":
   ...
  "Fields": [ 
    {
    "$type":"Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration, Sitecore.Commerce.Plugin.Search.Solr",
    "Name":"ExampleExternalSettingProperty",
    "Type":"System.String",
    "Handler":{
        "$type":"Sitecore.Commerce.Plugin.Catalog.ExternalSettingsFieldHandler, Sitecore.Commerce.Plugin.Catalog",
        "ExternalSettingsPropertyName":"Items Per Page"
        },   
    "Localizable":false

ExternalSettingsFieldHandlerインデックス・フィールド・ハンドラーのプロパティ

次の表に、ExternalSettingsFieldHandlerハンドラの設定プロパティの一覧と説明を示します。

財産

形容

"ExternalSettingsPropertyName"

インデックスを作成する値を定義するカスタムSitecoreカタログ アイテム フィールドの名前。

手記

外部設定プロパティが 共有プロパティの場合は、"Localizable" プロパティを "false"に設定する必要があります。

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