Crear un índice personalizado para referencias de formularios adaptables create-custom-index-for-adaptive-forms-references

Cree un índice de Lucene etiquetado para evitar consultas de recorrido cuando Adobe Experience Manager (AEM) Forms resuelva referencias de formularios adaptables. Sin un índice adecuado, la publicación de un fragmento de experiencia que contenga una referencia de formulario adaptable puede producir una advertencia Traversal query (query without index) en los registros.

En AEM Forms 6.5.24.0 y versiones posteriores, la consulta de referencia usa la etiqueta de índice aemformsAFReferences. Estas versiones incluyen el cambio de consulta, pero debe crear un índice personalizado con esa etiqueta. Este artículo muestra cómo definir e implementar el índice.

Para AEM Forms 6.5 LTS, consulte Crear un índice personalizado para referencias de formularios adaptables en AEM Forms 6.5 LTS.

Requisitos previos prerequisites

Antes de empezar, asegúrese de que dispone de lo siguiente:

  • AEM Forms 6.5.24.0 o posterior, con el complemento Forms correspondiente instalado.
  • Acceso para crear un índice bajo /oak:index en la instancia de autor.
  • Un proyecto de AEM con un módulo ui.apps si implementa el índice a través de un paquete de contenido o si tiene acceso a CRXDE Lite como alternativa de desarrollo.

Pruebe el índice en un entorno de ensayo o desarrollo antes de implementarlo en producción. Crear un índice puede llevar tiempo en un repositorio grande.

Definición del índice personalizado define-the-custom-index

Cree el índice en /oak:index/customAFReferenceLuceneIndex-1. Puede elegir un nombre de nodo de índice diferente, pero mantenga la etiqueta aemformsAFReferences sin cambios para que la consulta de referencia de Forms pueda seleccionar el índice.

Utilice la siguiente definición. Indexa sling:resourceType en nt:unstructured nodos bajo /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"
        }
      }
    }
  }
}

No agregue analyzed=true. La consulta de referencia usa restricciones de propiedad en lugar de una condición de contains de texto completo, por lo que no es necesario establecer esta configuración.

Implementación del índice con un paquete de contenido deploy-the-index-with-a-content-package

Utilice un paquete de contenido para implementaciones de producción.

  1. En el módulo ui.apps de su proyecto de AEM, cree ui.apps/src/main/content/jcr_root/_oak_index/customAFReferenceLuceneIndex-1/.

  2. Cree .content.xml en ese directorio con la siguiente definición:

    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>
    
  3. Agregue el siguiente filtro dentro del elemento workspaceFilter existente en ui.apps/src/main/content/META-INF/vault/filter.xml. Mantenga los demás filtros del proyecto sin cambios.

    code language-xml
    <filter root="/oak:index/customAFReferenceLuceneIndex-1"/>
    
  4. Genere el proyecto utilizando su configuración de generación existente e instale el paquete de contenido resultante en la instancia de autor. Para obtener instrucciones de carga e instalación de paquetes, consulte Administrador de paquetes.

  5. Confirme que /oak:index/customAFReferenceLuceneIndex-1 existe. Permita que la indexación asíncrona se complete antes de comprobar el plan de consulta.

Si elige un nombre de índice diferente, utilice ese nombre de forma coherente en el directorio, filtro y ruta de acceso al repositorio.

Creación del índice con CRXDE Lite create-the-index-with-crxde-lite

Utilice esta alternativa en un entorno de desarrollo en lugar del método de paquete de contenido.

Utilice las siguientes propiedades al crear el nodo de índice:

Propiedad
Tipo
Valor
selectionPolicy
Cadena
tag
compatVersion
Largo
2
includedPaths
String[]
/content
queryPaths
String[]
/content
tags
String[]
aemformsAFReferences
type
Cadena
lucene
async
String[]
async
evaluatePathRestrictions
Booleano
true
reindex
Booleano
false

String[] significa una propiedad String de varios valores, incluso cuando contiene sólo un valor.

  1. Abra http://localhost:4502/crx/de/index.jsp. Reemplace el host y el puerto por los de la instancia de autor.

  2. Navegue hasta /oak:index. Haga clic con el botón derecho en el nodo y seleccione Crear > Crear nodo.

  3. Crear customAFReferenceLuceneIndex-1 con tipo oak:QueryIndexDefinition.

  4. Agregue las propiedades de la tabla anterior al nodo de índice.

  5. En el nodo de índice, cree la siguiente jerarquía de nodos secundarios. Establezca el tipo de cada nodo secundario en nt:unstructured:

    code language-text
    indexRules
        nt:unstructured
            properties
                resourceType
    
  6. El resourceType, agregue name (cadena) con el valor sling:resourceType y propertyIndex (booleano) con el valor true.

  7. Seleccione Guardar todo y permita que se complete la indexación asincrónica.

Compruebe que la consulta utiliza el índice verify-that-the-query-uses-the-index

Compruebe el plan de consultas para confirmar que la consulta de referencia selecciona el índice personalizado.

  1. Confirme que la indexación asíncrona ha finalizado. Use Administrador de índices para inspeccionar el estado del índice.

  2. Abra Herramientas > Operaciones > Diagnóstico > Rendimiento de la consulta y seleccione Explicar consulta. Seleccione el idioma de consulta XPath e introduzca:

    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)
    
  3. Seleccione Explicar. Confirme que el plan utiliza lucene:customAFReferenceLuceneIndex-1 y /oak:index/customAFReferenceLuceneIndex-1, o el nombre de índice elegido, para las ramas de la consulta en lugar de un plan de recorrido. Para obtener más información, consulte Explicar consulta.

  4. Repita la operación de publicación del fragmento de experiencia que produjo la advertencia. Buscar nuevas advertencias de recorrido de com.adobe.aem.formsndocuments.publish.AssetReferenceProvider.resolvePathsToFindReferences en error.log.

Si el plan no selecciona el índice personalizado, compare la etiqueta, la jerarquía indexRules y la definición de propiedad sling:resourceType con los ejemplos anteriores. Para obtener más información, consulte Solución de problemas de índices Oak.

Para obtener más información sobre el rendimiento de las consultas y la configuración de índices, consulte:

recommendation-more-help
experience-manager-65-help-main-toc