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
odamAssetLucene-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 yadventures
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 nododam:Asset
, sino que personalice el índice OOTBdamAssetLucene
. 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
ycq: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 seroak:QueryIndexDefinition
- El tipo de índice (
type
) debe serlucene
- La propiedad asincrónica (
async
) debe serasync,nrt
- Use
includedPaths
y evite la propiedadexcludedPaths
. Establezca siemprequeryPaths
valor con el mismo valor queincludedPaths
valor. - Para aplicar la restricción de ruta de acceso, use la propiedad
evaluatePathRestrictions
y establézcala entrue
. - 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"] ...
- El tipo de nodo (
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
.
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.
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
.
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
.
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.
/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.
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 <prefix>.<customIndexName>-<version>-custom-<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
Deshabilitar por tipo MIME
Para deshabilitar Apache Tika por tipo MIME, siga estos pasos:
- Agregue el nodo
tika
de tipont:unstructured
en la definición de índice OOBT o personalizada. En el ejemplo siguiente, el tipo MIME del PDF está deshabilitado para el índice OOTBdamAssetLucene
.
/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 nodotika
.
<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
entrue
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.
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 enString
. Por ejemplo, en la siguiente imagen, la propiedadincludePropertyTypes
se agrega para el tipo de nododam:Asset
del índice OOBTdamAssetLucene
.
- Agregue
data
con las propiedades siguientes bajo el nodoproperties
, 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
- Reindexe la definición de índice actualizada estableciendo la propiedad
reindex
entrue
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
ycom.day.cq.search
a través dehttp://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: