アダプティブフォーム参照用のカスタムインデックスの作成 create-custom-index-for-adaptive-forms-references
Adobe Experience Manager(AEM)Formsがアダプティブフォーム参照を解決する際に、トラバーサルクエリを避けるために、タグ付きのLucene インデックスを作成します。 適切なインデックスがない場合、アダプティブフォーム参照を含むエクスペリエンスフラグメントを公開すると、ログにTraversal query (query without index)警告が生成される可能性があります。
AEM Forms 6.5.24.0以降では、参照クエリでaemformsAFReferences インデックスタグが使用されます。 これらのリリースにはクエリの変更が含まれていますが、そのタグを使用してカスタムインデックスを作成する必要があります。 この記事では、インデックスを定義してデプロイする方法について説明します。
AEM Forms 6.5 LTSについては、AEM Forms 6.5 LTSでアダプティブフォーム参照のカスタムインデックスを作成するを参照してください。
前提条件 prerequisites
始める前に、次のことを確認してください。
- 対応するForms アドオンがインストールされたAEM Forms 6.5.24.0以降。
- オーサーインスタンスの
/oak:indexの下にインデックスを作成するためのアクセス権。 - コンテンツパッケージを使用してインデックスをデプロイするか、開発の代替手段としてCRXDE Liteにアクセスする場合は、
ui.appsモジュールを持つAEM プロジェクト。
実稼動環境にデプロイする前に、開発環境またはステージング環境でインデックスをテストします。 インデックスの作成には、大きなリポジトリで時間がかかる場合があります。
カスタムインデックスの定義 define-the-custom-index
/oak:index/customAFReferenceLuceneIndex-1にインデックスを作成します。 別のインデックスノード名を選択できますが、Forms参照クエリでインデックスを選択できるように、aemformsAFReferences タグは変更しないでください。
次の定義を使用します。 /contentの下のnt:unstructured ノードにsling:resourceTypeのインデックスを作成します。
{
"jcr:primaryType": "oak:QueryIndexDefinition",
"selectionPolicy": "tag",
"compatVersion": 2,
"includedPaths": ["/content"],
"queryPaths": ["/content"],
"tags": ["aemformsAFReferences"],
"type": "lucene",
"async": ["async"],
"evaluatePathRestrictions": true,
"reindex": false,
"indexRules": {
"jcr:primaryType": "nt:unstructured",
"nt:unstructured": {
"jcr:primaryType": "nt:unstructured",
"properties": {
"jcr:primaryType": "nt:unstructured",
"resourceType": {
"jcr:primaryType": "nt:unstructured",
"propertyIndex": true,
"name": "sling:resourceType"
}
}
}
}
}
analyzed=trueを追加しないでください。 参照クエリでは、フルテキスト contains条件ではなくプロパティ制限を使用するため、設定は不要です。
コンテンツパッケージを使用したインデックスのデプロイ deploy-the-index-with-a-content-package
実稼動デプロイメントにコンテンツパッケージを使用します。
-
AEM プロジェクトの
ui.appsモジュールで、ui.apps/src/main/content/jcr_root/_oak_index/customAFReferenceLuceneIndex-1/を作成します。 -
次の定義を使用して、そのディレクトリに
.content.xmlを作成します。code language-xml <?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:oak="http://jackrabbit.apache.org/oak/ns/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" jcr:primaryType="oak:QueryIndexDefinition" async="[async]" compatVersion="{Long}2" evaluatePathRestrictions="{Boolean}true" includedPaths="[/content]" queryPaths="[/content]" reindex="{Boolean}false" selectionPolicy="tag" tags="[aemformsAFReferences]" type="lucene"> <indexRules jcr:primaryType="nt:unstructured"> <nt:unstructured jcr:primaryType="nt:unstructured"> <properties jcr:primaryType="nt:unstructured"> <resourceType jcr:primaryType="nt:unstructured" name="sling:resourceType" propertyIndex="{Boolean}true"/> </properties> </nt:unstructured> </indexRules> </jcr:root> -
ui.apps/src/main/content/META-INF/vault/filter.xmlの既存のworkspaceFilter要素の中に次のフィルターを追加します。 プロジェクトのその他のフィルターは変更しないでください。code language-xml <filter root="/oak:index/customAFReferenceLuceneIndex-1"/> -
既存のビルド設定を使用してプロジェクトをビルドし、結果のコンテンツパッケージをオーサーインスタンスにインストールします。 パッケージのアップロードとインストール手順については、 パッケージマネージャーを参照してください。
-
/oak:index/customAFReferenceLuceneIndex-1が存在することを確認します。 クエリ計画を確認する前に、非同期インデックス作成を完了できるようにします。
別のインデックス名を選択した場合は、その名前をディレクトリ、フィルター、リポジトリパスで一貫して使用します。
CRXDE Liteでインデックスを作成する create-the-index-with-crxde-lite
開発環境では、content-package メソッドの代わりにこの代替手段を使用します。
索引ノードを作成する際は、次のプロパティを使用します。
selectionPolicytagcompatVersion2includedPathsString[]/contentqueryPathsString[]/contenttagsString[]aemformsAFReferencestypeluceneasyncString[]asyncevaluatePathRestrictionstruereindexfalseString[]は、1つの値のみを含む場合でも、複数値の文字列プロパティを意味します。
-
http://localhost:4502/crx/de/index.jspを開きます。 ホストとポートをオーサーインスタンスのホストとポートに置き換えます。 -
/oak:indexに移動します。 ノードを右クリックし、作成 / ノードを作成を選択します。 -
タイプ
oak:QueryIndexDefinitionのcustomAFReferenceLuceneIndex-1を作成します。 -
上記の表のプロパティをインデックスノードに追加します。
-
インデックスノードの下に、次の子ノード階層を作成します。 すべての子ノードのタイプを
nt:unstructuredに設定します。code language-text indexRules nt:unstructured properties resourceType -
resourceTypeに、値sling:resourceTypeのname(文字列)と値trueのpropertyIndex(ブール値)を追加します。 -
すべて保存を選択し、非同期インデックス作成を完了させます。
クエリでインデックスが使用されていることを確認します verify-that-the-query-uses-the-index
クエリプランを確認して、参照クエリでカスタムインデックスが選択されていることを確認します。
-
非同期インデックス作成が完了したことを確認します。 索引マネージャーを使用して、索引の状態を調べます。
-
ツール > 操作 > 診断 > クエリパフォーマンス を開き、 クエリの説明を選択します。 XPath クエリ言語を選択し、次のように入力します。
code language-text /jcr:root/content//element(*, nt:unstructured)[ (@sling:resourceType = 'fd/af/components/aemform' or jcr:like(@sling:resourceType, '%components/aemformscontainer%') or jcr:like(@sling:resourceType, '%components/adaptiveForm/fragment%'))] option (index tag aemformsAFReferences) -
「説明」を選択します。 クエリのブランチに対して、トラバーサル プランではなく
lucene:customAFReferenceLuceneIndex-1と/oak:index/customAFReferenceLuceneIndex-1、または選択したインデックス名が使用されていることを確認します。 詳しくは、 クエリの説明を参照してください。 -
警告を生成したエクスペリエンスフラグメント公開操作を繰り返します。
com.adobe.aem.formsndocuments.publish.AssetReferenceProvider.resolvePathsToFindReferencesからの新しいトラバーサル警告について、error.logを確認してください。
プランでカスタムインデックスが選択されない場合は、上記の例に照らして、タグ、indexRules階層、sling:resourceType プロパティ定義を確認してください。 詳しい診断については、Oak インデックスのトラブルシューティング を参照してください。
関連タスク related-tasks
クエリのパフォーマンスとインデックス設定について詳しくは、次を参照してください。