1. 開発者向けのドキュメント

検索クエリフィールドマッピングの設定

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

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

Experience Edge(プレビュー)スキーマ上でGraphQL検索クエリで正確なフレーズマッチングが必要な場合は、SearchQueryFieldMapping機能を使ってトークン化されたフィールドを非トークン化された計算フィールドにマッピングしてください。この変換はクエリ構築コード内で行われ、クエリがSolr検索プロバイダーに送られる前に行われます。

デフォルトでは、Solrインデックスのテキストフィールドはトークン化されており、これは空白と句読点を使ってテキストを個別の用語に分割するプロセスです。例えば、"New Site"は別々に"new""site"になります。これは一般的なテキスト検索には有効ですが、正確な句のマッチングを破ります。EQ演算子で_name == "Site"の検索クエリはCONTAINSのように振る舞い、複数の結果を返します。

これを解決するために、lowercaseStringのようなフィールド型でトークン化されていないフィールド(例えば_customName)を作成し、完全な値を単一のトークンとして保持し、検索操作中に元の_nameフィールドをそれにマッピングできます。これにより、後方互換性を維持しつつ正確なマッチングが可能になります。

始める前に

以下を必ず確認してください:

  • SitecoreAI環境へのアクセス。

  • SitecoreAI設定ファイルや展開プロセスに精通していること。

検索クエリフィールドマッピングの設定

以下の例は、_nameフィールドを_customName計算されたフィールドにマッピングすることで検索クエリフィールドマッピングを設定する方法を示しています。計算されたフィールドの作成に関する完全な手順については、「 計算されたインデックスフィールドの作成」を参照してください。

SearchQueryFieldMapping機能を設定するには:

  1. 新しい計算インデックスフィールドを作成する

    既存の実装Sitecore.Services.GraphQL.EdgeSchema.ComputedFields.CustomNameComputedFieldを使って新しい計算フィールドを作成します。

    設定ファイルのcontentSearchセクションのAddComputedIndexFieldノードに新しいフィールドを追加してください。

    この例では、lowercaseString型を用いて_customNameフィールドを作成します。

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"                xmlns:role="http://www.sitecore.net/xmlconfig/role/">
        <sitecore>
            <contentSearch>
                <indexConfigurations>
                    <defaultSolrIndexConfiguration>
                        <documentOptions type="Sitecore.ContentSearch.SolrProvider.SolrDocumentBuilderOptions, 
                                                Sitecore.ContentSearch.SolrProvider">
                            <fields hint="raw:AddComputedIndexField">
                                <!-- Create a non-tokenized version of the _name field -->
                                <field fieldName="_customName" 
                                       returnType="lowercaseString" 
                                       type="Sitecore.Services.GraphQL.EdgeSchema.ComputedFields.CustomNameComputedField, 
                                              Sitecore.Services.GraphQL.EdgeSchema" />
                            </fields>
                        </documentOptions>
                    </defaultSolrIndexConfiguration>
                </indexConfigurations>
            </contentSearch>
        </sitecore>
    </configuration>
  2. 検索フィールド名を計算されたフィールドにマッピングします

    フィールドマッピングを設定するには、setFieldMappingノードにフィールド名マッピングモデルを追加します。このモデルは検索クエリフィールドをマッピングする際に、SearchQueryFieldMappingServiceによって処理されます。

    fieldMappingModelでは、_name体を_customName体に写します。

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:role="http://www.sitecore.net/xmlconfig/role/">
        <sitecore>
            <api>
                <GraphQL>
                    <setFieldMapping 
                        type="Sitecore.Services.GraphQL.EdgeSchema.Services.SearchQueryFieldMapping.FieldMapping, 
                               Sitecore.Services.GraphQL.EdgeSchema">
                        <fieldMapping hint="list:AddFieldMapping">
                            <!-- Map the original _name field to the non-tokenized _customName field -->
                            <fieldMappingModel 
                                fieldName="_name" 
                                type="Sitecore.Services.GraphQL.EdgeSchema.Services.SearchQueryFieldMapping.FieldMappingModel, 
                                       Sitecore.Services.GraphQL.EdgeSchema">
                                <fieldName>_name</fieldName>
                                <mappingField>_customName</mappingField>
                            </fieldMappingModel>
                        </fieldMapping>
                    </setFieldMapping>
                </GraphQL>
            </api>
        </sitecore>
    </configuration>
  3. パッチを含めてSitecoreにデプロイしてください

    ステップ1と2の構成パッチをプロジェクトにコミットし、SitecoreAI環境を展開します。

  4. インデックスの再構築

    展開後、すべての変更を加えた後に検索インデックスを再構築します。インデックスの再構築が完了すると、フィールドマッピングはアクティブになり、使用準備が整います。

クエリの検索クエリフィールドマッピングをクエリで活用してください

設定後、Edge(プレビュー)スキーマの場合、GraphQL検索クエリで元のフィールド名 (_name) を使用すると、マッピングは自動的にクエリをSolrインデックス内の非トークン化フィールド(_customName)にリダイレクトします。つまり、コード内で元のフィールド名を使い続けつつ、完全一致の恩恵を受けられます。

例:完全一致クエリ

_nameフィールドのEQ演算子を使うと、検索結果は正確な値に一致する項目を返します。このクエリは「Sitecore Experience」を検索し、各一致する項目のidフィールドとnameフィールドを求めます。

query Search {
  search(
    where: {
      name: "_name"
      value: "Sitecore Experience"
      operator: EQ
    }
  ) {
    results {
      id
      name
    }
  }
}

フィールドマッピングがなければ、この同じクエリは任意のトークン化された項を含む複数の結果を返します。_customNameへのマッピングでは、名前が「Sitecore Experience」と完全に一致するアイテムのみを返します。

例:クエリを包含

CONTAINSオペレーターは、フィールドマッピングの有無に関わらず検索語を含むアイテムを返します。このクエリは「Sitecore」を含む項目を検索し、IDと名前のフィールドを要求します。

query Search {
  search(
    where: {
      name: "_name"
      value: "Sitecore"
      operator: CONTAINS
    }
  ) {
    results {
      id
      name
    }
  }
}
注記

フィールドマッピングを設定する際には、以下の点を考慮してください:

  • 元のフィールド名(_name)は、マッピングが設定された後もクエリで使用可能です。

  • フィールドマッピングはこのPreview endpointにのみ適用されます。

  • 複数のフィールドを異なる非トークン化バージョンにマッピングできます。

  • カスタムフィールド名は、計算されたフィールド定義とフィールドマッピングの設定との間で一貫性を持つ必要があります。

この記事を改善するための提案がある場合は、 お知らせください!