Erstellen eines benutzerdefinierten Index für Verweise auf adaptive Formulare create-custom-index-for-adaptive-forms-references
Erstellen Sie einen getaggten Lucene-Index, um Durchlaufabfragen zu vermeiden, wenn Adobe Experience Manager (AEM) Forms Verweise auf adaptive Formulare auflöst. Ohne einen geeigneten Index kann das Veröffentlichen eines Experience Fragments, das einen Verweis auf ein adaptives Formular enthält, eine Traversal query (query without index) in den Protokollen auslösen.
In AEM Forms 6.5 LTS SP1 und höher verwendet die Referenzabfrage das aemformsAFReferences-Index-Tag. Diese Versionen enthalten die Abfrageänderung, Sie müssen jedoch einen benutzerdefinierten Index mit diesem Tag erstellen. Dieser Artikel zeigt, wie Sie den Index definieren und bereitstellen.
Informationen zu AEM Forms 6.5 finden Sie unter Erstellen eines benutzerdefinierten Index für Verweise auf adaptive Formulare in AEM Forms 6.5.
Voraussetzungen prerequisites
Bevor Sie beginnen, stellen Sie Folgendes sicher:
- AEM Forms 6.5 LTS SP1 oder höher, wobei das entsprechende Forms-Add-on installiert ist.
- Zugriff zum Erstellen eines Index unter
/oak:indexauf der Autoreninstanz. - Ein AEM-Projekt mit einem
ui.apps, wenn Sie den Index über ein Inhaltspaket bereitstellen oder auf CRXDE Lite als Entwicklungsalternative zugreifen.
Testen Sie den Index in einer Entwicklungs- oder Staging-Umgebung, bevor Sie ihn in der Produktion bereitstellen. Die Erstellung eines Index kann bei einem großen Repository einige Zeit in Anspruch nehmen.
Definieren des benutzerdefinierten Index define-the-custom-index
Erstellen Sie den Index unter /oak:index/customAFReferenceLuceneIndex-1. Sie können einen anderen Indexknotennamen auswählen, das aemformsAFReferences-Tag jedoch unverändert lassen, damit die Forms-Referenzabfrage den Index auswählen kann.
Verwenden Sie die folgende Definition. Er indiziert sling:resourceType auf nt:unstructured Knoten unter /content.
{
"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 nicht hinzufügen. Die Referenzabfrage verwendet Eigenschaftsbeschränkungen anstelle einer Volltext-contains, sodass die Einstellung nicht erforderlich ist.
Bereitstellen des Index mit einem Inhaltspaket deploy-the-index-with-a-content-package
Verwenden Sie ein Inhaltspaket für Produktionsbereitstellungen.
-
Erstellen Sie im
ui.appsIhres AEM-Projektsui.apps/src/main/content/jcr_root/_oak_index/customAFReferenceLuceneIndex-1/. -
Erstellen Sie
.content.xmlin diesem Verzeichnis mit der folgenden Definition: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> -
Fügen Sie den folgenden Filter innerhalb des vorhandenen
workspaceFilterinui.apps/src/main/content/META-INF/vault/filter.xmlhinzu. Die anderen Filter des Projekts bleiben unverändert.code language-xml <filter root="/oak:index/customAFReferenceLuceneIndex-1"/> -
Erstellen Sie das Projekt mit der vorhandenen Build-Konfiguration und installieren Sie das resultierende Inhaltspaket auf der Autoreninstanz. Informationen zu Paket-Upload und Installationsanweisungen finden Sie unter Package Manager.
-
Bestätigen Sie, dass
/oak:index/customAFReferenceLuceneIndex-1vorhanden ist. Zulassen, dass die asynchrone Indizierung abgeschlossen wird, bevor der Abfrageplan überprüft wird.
Wenn Sie einen anderen Indexnamen ausgewählt haben, verwenden Sie diesen Namen durchgängig im Verzeichnis, im Filter und im Repository-Pfad.
Erstellen des Index mit CRXDE Lite create-the-index-with-crxde-lite
Verwenden Sie diese Alternative in einer Entwicklungsumgebung anstelle der Content-Package-Methode.
Verwenden Sie beim Erstellen des Indexknotens die folgenden Eigenschaften:
selectionPolicytagcompatVersion2includedPathsString[]/contentqueryPathsString[]/contenttagsString[]aemformsAFReferencestypeluceneasyncString[]asyncevaluatePathRestrictionstruereindexfalseString[] bedeutet eine String-Eigenschaft mit mehreren Werten, auch wenn sie nur einen Wert enthält.
-
Öffnen Sie
http://localhost:4502/crx/de/index.jsp. Ersetzen Sie den Host und Port durch die Ihrer Autoreninstanz. -
Navigieren Sie zu
/oak:index. Klicken Sie mit der rechten Maustaste auf den Knoten und wählen Erstellen > Knoten erstellen. -
Erstellen Sie
customAFReferenceLuceneIndex-1mit dem Typoak:QueryIndexDefinition. -
Fügen Sie die Eigenschaften aus der obigen Tabelle zum Indexknoten hinzu.
-
Erstellen Sie unter dem Indexknoten die folgende Hierarchie untergeordneter Knoten. Legen Sie den Typ jedes untergeordneten Knotens auf
nt:unstructuredfest:code language-text indexRules nt:unstructured properties resourceType -
Fügen Sie auf
resourceTypename(Zeichenfolge) mit dem Wertsling:resourceTypeundpropertyIndex(Boolesch) mit dem Werttruehinzu. -
Wählen Sie Alle speichern und warten Sie, bis die asynchrone Indizierung abgeschlossen ist.
Stellen Sie sicher, dass die Abfrage den Index verwendet verify-that-the-query-uses-the-index
Überprüfen Sie den Abfrageplan, um sicherzustellen, dass die Referenzabfrage Ihren benutzerdefinierten Index auswählt.
-
Vergewissern Sie sich, dass die asynchrone Indizierung abgeschlossen ist. Verwenden Index-Manager, um den Indexstatus zu überprüfen.
-
Öffnen Sie Tools > Vorgänge > Diagnose > Abfrageleistung und wählen Sie Abfrage erläutern. Wählen Sie die XPath-Abfragesprache aus und geben Sie Folgendes ein:
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) -
Wählen Sie Erläuterung aus. Vergewissern Sie sich, dass der Plan
lucene:customAFReferenceLuceneIndex-1und/oak:index/customAFReferenceLuceneIndex-1oder Ihren ausgewählten Indexnamen für die Verzweigungen der Abfrage statt eines Durchlaufplans verwendet. Weitere Informationen finden Sie unter Abfrage erläutern. -
Wiederholen Sie den Experience Fragment-Veröffentlichungsvorgang, der die Warnung ausgelöst hat. Überprüfen Sie
error.logauf neue Durchlaufwarnungen voncom.adobe.aem.formsndocuments.publish.AssetReferenceProvider.resolvePathsToFindReferences.
Wenn der Plan den benutzerdefinierten Index nicht auswählt, überprüfen Sie das -Tag, die indexRules und die Definition der sling:resourceType-Eigenschaft mit den obigen Beispielen. Weitere Informationen zur Diagnose finden Sie Fehlerbehebung bei Oak-Indizes.
Verwandte Aufgaben related-tasks
Weitere Informationen zur Abfrageleistung und Indexkonfiguration finden Sie unter: