GraphQLの「includeVariations」は、AEMaaCS でフィルターを使用して空を返します
AEMaaCS では、追加のフィルター(includeVariations:true など)が適用されると、GraphQL クエリの _path パラメーターが空の結果を返します。 これは、特定のフィルターを使用してコンテンツフラグメントのバリエーションを取得する場合に発生します。 この問題を修正するには、ハイブリッドフィルタリングを有効にし、クエリフィルターを変更します。
説明 description
環境
- 製品: Adobe Experience Manager(AEM)as a Cloud Service - Sites
- インスタンス: 開発
問題/症状
includeVariations:trueを使用すると、正しい結果が返されます。- フィルター(
_pathなど)を追加すると、空のクエリが出力されます。 - フィルターを使用してコンテンツフラグメントのバリエーションを取得する際に発生します
解決策 resolution
この問題を解決するには、次の手順に従います。
-
cfGlobalVersion=1プロパティを/content/damに追加して、ハイブリッドフィルタリングを有効にします。 クエリのパフォーマンスを向上し、パスベースのフィルタリングの問題を修正します。 詳しくは、AEM GraphQL ハイブリッドフィルタリングの使用 ドキュメントを参照してください。 -
実稼動環境に適用する前に、より低い環境でテストします。
-
クエリフィルターを変更します 式の
STARTS_WITHの代わりに、_pathにEQUALS演算子を使用します。code language-none [ { value: "/content/dam/content-fragments/sites/example-path/", _operator: STARTS_WITH } ]注意 :この回避策は、ハイブリッドフィルタリングが有効になっている場合は機能しません。
-
複数のバリエーションが必要な場合は、次に示すように、エイリアスを使用して各バリエーションを明示的にクエリします。
code language-none query($path: String!) { standard: pageByPath(_path: $path, variation: "standard") { item { _path title _variation } } premier: pageByPath(_path: $path, variation: "premier") { item { _path title _variation } } } -
クエリデザインを最適化するには、特定のバリエーションが 1 つだけ必要な場合は、
includeVariations: trueに依存するのではなく、バリエーションパラメーターを使用してクエリ内で直接バリエーションを指定します。 -
関連するコンテンツモデルが欠落している無効なコンテンツフラグメントを確認します。
-
無効なフラグメントをクリーンアップするか、適切なモデルに関連付けて有効にします。
-
ハイブリッドフィルタリングを有効にするか変更を加えた後、オーサーインスタンスとパブリッシュインスタンスの両方でログを確認し、設定が正しく適用されていることを確認します。
-
必要なフラグメントが 1 つだけの場合は、リストクエリは慎重に使用します。ターゲットクエリを優先します(例:
pageByPath)。
関連資料
- AEM as a Cloud Service ユーザーガイドの 最適化されたGraphQL フィルタリング用のコンテンツフラグメントの更新 。
- AEM ドキュメントの GraphQL クエリの最適化 。