Experience Edgeスキーマ

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

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

Sitecore Experience EdgeはヘッドレスSitecore開発の一般的なフロントエンドユースケースに対応するために、読み取り専用のGraphQLスキーマを持っています。Sitecore項目に関する限定的な情報を公開します。例えば、標準フィールドは利用できません。

以下のクエリがエントリーポイントとして利用可能です:

  • item - パスやIDでアイテムを照会できる。
  • layout - 通常は、そのレイアウトサービスJSONにアクセスする目的で、サイトやルートパスでアイテムを照会できます(rendered)。
  • search - フィールド値や共通プロパティでアイテムを見つけるためのブールフィールド検索クエリの構築が可能です。

詳細については、例クエリ をご参照し、プレビューエンドポイントIDEのGraphQLテスト用UI内のDocsタブをご利用ください。

テンプレート投影

Experience Edgeスキーマで利用可能なタイプは、公開されたSitecoreインスタンスのテンプレート定義を反映しています。特定のタイプからフィールドを選択するインラインフラグメントを使用することで、強力型テンプレートフィールドを有効にすることができます。

Sitecoreでは、複数のテンプレートが同じ名前を持ち、項目グラフのコアフィールドと競合するフィールド名を持つテンプレートも可能です。GraphQLでは、型とフィールドの名前は一意でなければなりません。命名の衝突が発生した場合、最新の作成日を持つ項目またはフィールド項目が名前に付加 _{guid} されます。作成日が使われるのは順序が安定している必要があり、グラフタイプ名は参照後に決して変更されてはならないからです。

!注GraphQL型はHelixのコンテンツ構造に従うテンプレートのみに作成されます。つまり、GraphQL型は以下のルートのテンプレートに対してのみ生成されます。

  • /sitecore/templates/Foundation

  • /sitecore/templates/Feature

  • /sitecore/templates/Project

  • /sitecore/templates/User Defined

ページ分け

検索クエリのようなページ分け付きクエリやExperience Edgeスキーマ内のフィールドは、カーソルベースのシステムを使って結果ページを要求します。

ページ付きクエリの場合:

  • クエリの引数にはfirst (返す結果数)とafter (最初のカーソル)が含まれます。 firstのデフォルト値は10です。

  • クエリ結果には、hasNext(結果が複数あるかどうか)とendCursor(次のページを得るために使われる)を含むpageInfoが含まれます。

  • クエリ結果にはtotal (利用可能な結果の総数を示す)も含まれます。

    !注最初の引数は、Previewスキーマの基盤となるGraphQLライブラリで使われる複雑度計算をクエリする特別な意味を持ちます。特に、Itemグラフタイプのネストされたchildrenフィールドを使用すると、Queryが実行するには複雑すぎるというエラーを引き起こすことがあります。以下のセクションでは、クエリ複雑性の扱いに関する推奨事項を含みます。

クエリ複雑性

Experience Edgeのクエリ複雑度は250に制限されています。クエリを実行時環境で使用する前にテストし、複雑さの要件を満たしているか確認することをお勧めします。クエリが複雑すぎる場合は、以下の方法を試してください:

  • 複数の小さなクエリに分割します。例えば、1つのクエリでデータセットを取得し、その後のクエリをそのデータセットに適用します。複数のオブジェクトの大規模なクエリはクエリの複雑さを大幅に増加させます。
  • クエリから不要なフィールドを削除してください。

コンテンツ検索用の利用可能なフィールド

Experience Edgeでは、以下の表に記載されている特殊フィールドに対してGraphQL searchクエリを使用できます。テンプレートにクエリを出す際は、ユーザー定義フィールドと以下の特殊フィールドのみをクエリできます。例えば、サンプルアイテムテンプレートのユーザー定義titleフィールドはクエリできますが、_Sortorderはできません。

フィールド

概要

_templates

すべてのテンプレートGUIDを含み、ベーステンプレートも含まれます。階層内でテンプレートを使用するすべてのアイテムを見つけるために使用できます。

_path

親項目を含み、GUIDによってアイテムの子孫を取得するために使用できます。例えば、contains 節と /home パスのIDを使うと、結果には /home とその子(例: /home/about_us)が含まれます。

_parent

そのアイテムの直系親のIDです。

_name

アイテム名。

_language

アイテムの言語。

_hasLayout

アイテムにプレゼンテーションの詳細やレイアウトデータがあるかどうかを示します。

searchクエリは以下の演算子をサポートしています。

!注Searchオペレーターの挙動は、DeliveryエンドポイントかPreviewエンドポイント(トークン化された検索インデックスを使用する)かによって異なります。

  • EQ (Equals) - 値が完全に一致するユーザー定義フィールドのみをマッチングします。

    • Deliveryエンドポイントでは、この演算子は完全に一致するユーザー定義フィールドのみをマッチングします。フィールド全体が検索値と完全に一致しなければならず、部分的なマッチングは返されません。

      例えば、EQ演算子でipsumを検索しても*、lorem ipsum dolor sit ametを含むフィールドにはマッチしませんが、ipsumの値が正確にipsum*であるフィールドにはマッチします。

    • プレビューエンドポイントでは、Solr検索インデックスのすべてのテキストフィールドがデフォルトでトークン化されているため、テキストフィールドのCONTAINS演算子として機能します。つまり、完全に一致すると予想されても複数の結果を返すことがあります。

      例えば、EQ演算子でipsumを検索すると、lorem ipsum dolor sit ametを含むフィールドの結果が返ってくることがあります。

      プレビューエンドポイントのEQと正確に一致させるために、SearchQueryFieldMapping機能を使ってトークン化されたフィールドを非トークン化された計算フィールドにマッピングしてください。関連するサポート記事も参照KB1003665

    正確な全フィールドマッチングが必要な場合はこの演算子を使いましょうが、プレビューエンドポイントでのトークン化動作には注意してください。

  • CONTAINS - フィールド内で部分文字列のマッチを行う。

    • Deliveryエンドポイントでは、トークン化やランキングなしでそのまま値がマッチングされます。

      例えば、CONTAINS演算子でipsumを検索すると、テキスト内のどこかに値が現れる任意のフィールド(例えばlorem ipsum dolor sit amet)と一致します。

    • プレビューエンドポイントでは、CONTAINSオペレーターがトークン化されたフィールド値に基づいて複数の結果を返すことができます。これはプレビューエンドポイントがトークン化された検索インデックスを使用しているためです。

    このオペレーターは部分的なテキストマッチや、フィールド内の単語やフレーズに基づくコンテンツのフィルタリングに使います。

!注GraphQLの検索フィールドは、全文検索やサイト検索機能の実装ではなく、コンテンツのフィルタリング用に設計されています。より高度な検索機能を求めるなら、専用の検索サービスの利用を検討してください。

これはユーザー定義フィールド内のCONTAINS演算子を使ってアイテムを検索する例です:

query Search { search( where: { name: "title", value: "Sitecore", operator: CONTAINS } ) { results { id name } } }

こちらはユーザー定義のフィールドで正確な一致を使ったアイテム検索の例です:

query Search { search( where: { name: "_parent" value: "110D559FDEA542EA9C1C8A5DF7E70EF9" operator: EQ } ) { results { id name } } }

以下は複数の節を組み合わせる例です:

query Search { search( where: { AND: { name: "_parent" value: "110D559FDEA542EA9C1C8A5DF7E70EF9" operator: EQ }, { name: "title" value: "another" operator: CONTAINS }

} ) { results { id name } } }

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