AEM Prácticas recomendadas de indización en la

Obtenga información acerca de las prácticas recomendadas de indexación en Adobe Experience Manager AEM (). Apache Jackrabbit Oak AEM alimenta la búsqueda de contenido en el modo de búsqueda y los siguientes son puntos clave:

  • AEM De forma predeterminada, proporciona varios índices para admitir la funcionalidad de búsqueda y consulta, por ejemplo damAssetLucene, cqPageLucene y más.
  • Todas las definiciones de índice se almacenan en el repositorio en el nodo /oak:index.
  • AEM as a Cloud Service solo admite índices Oak Lucene.
  • AEM La configuración del índice debe administrarse en la base de código del proyecto de la e implementarse mediante canalizaciones CI/CD de Cloud Manager.
  • Si hay varios índices disponibles para una consulta determinada, se utiliza el índice con el costo estimado más bajo.
  • Si no hay ningún índice disponible para una consulta determinada, se atraviesa el árbol de contenido para encontrar el contenido coincidente. Sin embargo, el límite predeterminado a través de org.apache.jackrabbit.oak.query.QueryEngineSettingsService es atravesar solo 10 000 nodos.
  • Los resultados de una consulta se han filtrado al menos para garantizar que el usuario actual tenga acceso de lectura. Esto significa que los resultados de la consulta pueden ser menores que el número de nodos indexados.
  • La reindexación del repositorio después de los cambios de definición de índice requiere tiempo y depende del tamaño del repositorio.

AEM Para disponer de una funcionalidad de búsqueda eficiente y correcta que no afecte al rendimiento de la instancia de la instancia de, es importante comprender las prácticas recomendadas de indexación.

Índice personalizado frente a OOTB

A veces, debe crear índices personalizados para satisfacer los requisitos de búsqueda. Sin embargo, siga estas directrices antes de crear índices personalizados:

  • Comprenda los requisitos de búsqueda y compruebe si los índices OOTB pueden admitir los requisitos de búsqueda. Use la Herramienta de rendimiento de consultas, disponible en SDK local y AEM CS a través de Developer Console o https://author-pXXXX-eYYYY.adobeaemcloud.com/ui#/aem/libs/granite/operations/content/diagnosistools/queryPerformance.html?appId=aemshell.

  • Defina una consulta óptima, use el diagrama de flujo optimizando consultas y la Hoja de referencia de consultas JCR como referencia.

  • Si los índices OOTB no admiten los requisitos de búsqueda, tiene dos opciones. Sin embargo, revise las sugerencias para crear índices eficientes

    • Personalice el índice OOTB: opción preferida ya que es fácil de mantener y actualizar.
    • Índice totalmente personalizado: Solo si la opción anterior no funciona.

Personalización del índice OOTB

  • En AEMCS, al personalizar el índice OOTB, use <OOTBndexName>-<productVersion>-custom-<customVersion> convención de nomenclatura. Por ejemplo, cqPageLucene-custom-1 o damAssetLucene-8-custom-1. Esto ayuda a combinar la definición de índice personalizada cada vez que se actualiza el índice OOTB. Consulte Cambios en los índices predeterminados para obtener más información.

  • AEM En 6.X, el nombre anterior no funciona; sin embargo, simplemente actualice el índice OOTB con las propiedades necesarias en el nodo indexRules.

  • AEM Copie siempre la definición de índice OOTB más reciente de la instancia de mediante el Administrador de paquetes DE de CRX (https://experienceleague.adobe.com/crx/packmgr/?lang=es), cambie su nombre y agregue personalizaciones dentro del archivo XML.

  • AEM Almacene la definición de índice en el proyecto de la en ui.apps/src/main/content/jcr_root/_oak_index e impleméntelo usando las canalizaciones CI/CD de Cloud Manager. Consulte Implementación de definiciones de índice personalizadas para obtener más información.

Índice totalmente personalizado

La creación de un índice totalmente personalizado debe ser la última opción y solo si la opción anterior no funciona.

  • Al crear un índice totalmente personalizado, utilice <prefix>.<customIndexName>-<version>-custom-<customVersion> convención de nomenclatura. Por ejemplo, wknd.adventures-1-custom-1. Esto ayuda a evitar conflictos de nombres. Aquí, wknd es el prefijo y adventures es el nombre de índice personalizado. AEM Esta convención es aplicable tanto a la versión 6.X como a la versión 6.X de AEM CS y ayuda a prepararse para una migración futura a AEM CS.

  • AEMCS solo admite índices Lucene, por lo que, para prepararse para una migración futura a AEMCS, utilice siempre índices Lucene. Consulte Índices Lucene vs. Índices de propiedad para obtener más detalles.

  • Evite crear un índice personalizado en el mismo tipo de nodo que el índice OOTB. En su lugar, personalice el índice OOTB con las propiedades necesarias en el nodo indexRules. Por ejemplo, no cree un índice personalizado en el tipo de nodo dam:Asset, sino que personalice el índice OOTB damAssetLucene. Ha sido una causa raíz común de problemas funcionales y de rendimiento.

  • Además, evite agregar varios tipos de nodo, por ejemplo cq:Page y cq:Tag, bajo el nodo de reglas de indexación (indexRules). En su lugar, cree índices independientes para cada tipo de nodo.

  • AEM Como se mencionó en la sección anterior, almacene la definición del índice en el proyecto de la en ui.apps/src/main/content/jcr_root/_oak_index e impleméntelo usando las canalizaciones CI/CD de Cloud Manager. Consulte Implementación de definiciones de índice personalizadas para obtener más información.

  • Las directrices de definición de índice son:

    • El tipo de nodo (jcr:primaryType) debe ser oak:QueryIndexDefinition
    • El tipo de índice (type) debe ser lucene
    • La propiedad asincrónica (async) debe ser async,nrt
    • Use includedPaths y evite la propiedad excludedPaths. Establezca siempre queryPaths valor con el mismo valor que includedPaths valor.
    • Para aplicar la restricción de ruta de acceso, use la propiedad evaluatePathRestrictions y establézcala en true.
    • Utilice la propiedad tags para etiquetar el índice y, al consultar, especifique este valor de etiquetas para utilizar el índice. La sintaxis general de la consulta es <query> option(index tag <tagName>).
    code language-xml
    /oak:index/wknd.adventures-1-custom-1
        - jcr:primaryType = "oak:QueryIndexDefinition"
        - type = "lucene"
        - compatVersion = 2
        - async = ["async", "nrt"]
        - includedPaths = ["/content/wknd"]
        - queryPaths = ["/content/wknd"]
        - evaluatePathRestrictions = true
        - tags = ["customAdvSearch"]
    ...
    

Ejemplos

Para comprender las prácticas recomendadas, veamos algunos ejemplos.

Uso incorrecto de la propiedad de etiquetas

La siguiente imagen muestra la definición de índice personalizada y OOTB, destacando la propiedad tags. Ambos índices utilizan el mismo valor visualSimilaritySearch.

Uso incorrecto de la propiedad de etiquetas

Análisis

Es un uso incorrecto de la propiedad tags en el índice personalizado. El motor de consultas de Oak elige el índice personalizado por encima del índice OOTB, la causa del coste estimado más bajo.

La forma correcta es personalizar el índice OOTB y agregar las propiedades necesarias en el nodo indexRules. Consulte Personalización del índice OOTB para obtener más información.

Índice en el tipo de nodo dam:Asset

La siguiente imagen muestra el índice personalizado para el tipo de nodo dam:Asset con la propiedad includedPaths establecida en una ruta de acceso específica.

Índice en dam:Asset nodetype

Análisis

Si realiza Omnisearch en Assets, devuelve resultados incorrectos porque el índice personalizado tiene un coste estimado más bajo.

No cree un índice personalizado en el tipo de nodo dam:Asset, sino que personalice el índice OOTB damAssetLucene con las propiedades necesarias en el nodo indexRules.

Varios tipos de nodo en reglas de indexación

La siguiente imagen muestra un índice personalizado con varios tipos de nodos bajo el nodo indexRules.

Varios tipos de nodos bajo las reglas de indexación

Análisis

No se recomienda agregar varios tipos de nodo en un solo índice. Sin embargo, puede indizar los tipos de nodo en el mismo índice si están estrechamente relacionados, por ejemplo, cq:Page y cq:PageContent.

Una solución válida es personalizar el índice OOTB cqPageLucene y damAssetLucene, agregar las propiedades necesarias en el nodo indexRules existente.

Ausencia de la propiedad queryPaths

La imagen siguiente muestra el índice personalizado (que no sigue también la convención de nomenclatura) sin la propiedad queryPaths.

Falta de la propiedad queryPaths

Análisis

Establezca siempre queryPaths valor con el mismo valor que includedPaths valor. Además, para aplicar la restricción de ruta de acceso, establezca la propiedad evaluatePathRestrictions en true.

Consulta con etiqueta de índice

La siguiente imagen muestra el índice personalizado con la propiedad tags y cómo utilizarlo al consultar.

Realizando consulta con la etiqueta de índice

/jcr:root/content/dam//element(*,dam:Asset)[(jcr:content/@contentFragment = 'true' and jcr:contains(., '/content/sitebuilder/test/mysite/live/ja-jp/mypage'))]order by @jcr:created descending option (index tag assetPrefixNodeNameSearch)
Análisis

Muestra cómo establecer el valor de la propiedad tags correcto y sin conflictos en el índice y utilizarlo durante la consulta. La sintaxis general de la consulta es <query> option(index tag <tagName>). Consulte también Etiqueta de índice de opciones de consulta

Índice personalizado

La siguiente imagen muestra un índice personalizado con el nodo suggestion para lograr la funcionalidad de búsqueda avanzada.

Índice personalizado

Análisis

Es un caso de uso válido crear un índice personalizado para la funcionalidad búsqueda avanzada. Sin embargo, el nombre del índice debe ir después de &lt;prefix>.&lt;customIndexName>-&lt;version>-custom-&lt;customVersion> convención de nomenclatura.

Optimización de índice al deshabilitar Apache Tika

AEM Utiliza Apache Tika para extraer metadatos y contenido de texto de tipos de archivo como PDF, Word, Excel y más. El contenido extraído se almacena en el repositorio y se indexa mediante el índice Oak Lucene.

A veces, los usuarios no requieren la capacidad de buscar dentro del contenido de un archivo/recurso; en estos casos, puede mejorar el rendimiento de indexación deshabilitando el Apache Tika. Las ventajas son:

  • Indexación más rápida
  • Reducción de tamaño de índice
  • Menos uso de hardware
CAUTION
Antes de deshabilitar Apache Tika, asegúrese de que los requisitos de búsqueda no requieran la capacidad de buscar dentro del contenido de un recurso.

Deshabilitar por tipo MIME

Para deshabilitar Apache Tika por tipo MIME, siga estos pasos:

  • Agregue el nodo tika de tipo nt:unstructured en la definición de índice OOBT o personalizada. En el ejemplo siguiente, el tipo MIME del PDF está deshabilitado para el índice OOTB damAssetLucene.
/oak:index/damAssetLucene
    - jcr:primaryType = "oak:QueryIndexDefinition"
    - type = "lucene"
    ...
    <tika jcr:primaryType="nt:unstructured">
        <config.xml/>
    </tika>
  • Agregue config.xml con los siguientes detalles en el nodo tika.
<properties>
  <parsers>
    <parser class="org.apache.tika.parser.EmptyParser">
      <mime>application/pdf</mime>
      <!-- Add more mime types to disable -->
  </parsers>
</properties>
  • Para actualizar el índice almacenado, establezca la propiedad refresh en true bajo el nodo de definición de índice, consulte Propiedades de definición de índice para obtener más detalles.

La siguiente imagen muestra el índice OOTB damAssetLucene con el nodo tika y el archivo config.xml que deshabilita el PDF y otros tipos de MIME.

Índice damAssetLucene de OOTB con nodo tika

Deshabilitar completamente

Para deshabilitar Apache Tika por completo, siga los siguientes pasos:

  • Agregue la propiedad includePropertyTypes en /oak:index/<INDEX-NAME>/indexRules/<NODE-TYPE> y establezca el valor en String. Por ejemplo, en la siguiente imagen, la propiedad includePropertyTypes se agrega para el tipo de nodo dam:Asset del índice OOBT damAssetLucene.

Propiedad IncludePropertyTypes

  • Agregue data con las propiedades siguientes bajo el nodo properties, asegúrese de que se encuentre el primer nodo por encima de la definición de la propiedad. Por ejemplo, vea la siguiente imagen:
/oak:index/<INDEX-NAME>/indexRules/<NODE-TYPE>/properties/data
    - jcr:primaryType = "nt:unstructured"
    - type = "String"
    - name = "jcr:data"
    - nodeScopeIndex = false
    - propertyIndex = false
    - analyze = false

Propiedad de datos

  • Reindexe la definición de índice actualizada estableciendo la propiedad reindex en true bajo el nodo de definición de índice.

Herramientas útiles

Revisemos algunas herramientas que pueden ayudarle a definir, analizar y optimizar los índices.

Herramienta de creación de índices

La herramienta Generador de definiciones de índice de Oak ayuda a generar la definición de índice basada en las consultas de entrada. Es un buen punto de partida para crear un índice personalizado.

Herramienta Analizar índice

La herramienta Analizador de definición de índice ayuda a analizar la definición de índice y proporciona recomendaciones para mejorar la definición de índice.

Herramienta de rendimiento de consultas

La herramienta de rendimiento de consultas OOTB disponible en SDK local y AEMCS a través de Developer Console o https://author-pXXXX-eYYYY.adobeaemcloud.com/ui#/aem/libs/granite/operations/content/diagnosistools/queryPerformance.html?appId=aemshell ayuda a analizar el rendimiento de las consultas y Hoja de referencia de consultas JCR para definir la consulta óptima.

Herramientas y sugerencias para la resolución de problemas

AEM La mayoría de las siguientes opciones se aplican a la solución de problemas local y a la versión 6.X de la.

  • Administrador de índices disponible en http://host:port/libs/granite/operations/content/diagnosistools/indexManager.html para obtener información de índices como tipo, última actualización y tamaño.

  • Registro detallado de Oak query y paquetes Java™ relacionados con la indexación como org.apache.jackrabbit.oak.plugins.index, org.apache.jackrabbit.oak.query y com.day.cq.search a través de http://host:port/system/console/slinglog para la resolución de problemas.

  • MBean JMX de tipo IndexStats disponible en http://host:port/system/console/jmx para obtener información de índice como estado, progreso o estadísticas relacionadas con la indexación asincrónica. También proporciona FailingIndexStats, si no hay resultados aquí, significa que no hay índices dañados. AsyncIndexerService marca como dañado cualquier índice que no se actualice durante 30 minutos (configurable) y detiene su indexación. Si una consulta no da los resultados esperados, es útil que los desarrolladores comprueben esto antes de continuar con la reindexación, ya que esta es computacionalmente costosa y lleva tiempo.

  • MBean de JMX del tipo LuceneIndex disponible en http://host:port/system/console/jmx para estadísticas de índice de Lucene como tamaño, número de documentos por definición de índice.

  • MBean de JMX del tipo QueryStat disponible en http://host:port/system/console/jmx para Oak Query Statistics, que incluye consultas lentas y populares con detalles como consulta y tiempo de ejecución.

Recursos adicionales

Consulte la siguiente documentación para obtener más información:

recommendation-more-help
c92bdb17-1e49-4e76-bcdd-89e4f85f45e6