Pregunta

¿Cómo podemos afinar nuestra funcionalidad de búsqueda CQ5, excluir ciertas propiedades de la indexación, habilitar la corrección ortográfica, derivar u otras funciones?

Respuesta y resolución

El módulo de búsqueda en CQ5 está construido usando CRX.  CRX utiliza un índice Apache Lucene integrado para implementar la búsqueda.  CRX proporciona varios parámetros y configuraciones que le permiten ajustar el índice para satisfacer sus necesidades.

Configuración del SearchIndex:

En primer lugar, un repositorio CRX puede tener uno o varios espacios de trabajo, y cada espacio de trabajo tiene su propio índice de búsqueda.  Además, el índice de búsqueda de cada espacio de trabajo puede configurarse por separado en el archivo workspace.xml del espacio de trabajo.

En una instalación CQ5 predeterminada, solo tiene un espacio de trabajo CRX llamado "crx.default".  Este espacio de trabajo almacena todo el contenido de su sitio (excluyendo las versiones).  La configuración del índice de búsqueda para este espacio de trabajo se puede encontrar en crx-quickstart/workspaces/crx.default/workspace.xml.  Todas las configuraciones para esto se pueden hacer dentro del elemento <SearchIndex>.  Una referencia de todas estas configuraciones se puede encontrar aquí.

Aquí hay un ejemplo de la sección SearchIndex de workspace.xml:

...

 <SearchIndex class="com.day.crx.query.lucene.LuceneHandler"> <param name="path" value="${wsp.home}/index"/> </SearchIndex> ...

configuración de indexing_config.xml:

Las configuraciones en workspace.xml le permiten ajustar el comportamiento del índice de búsqueda, pero no le permiten modificar el contenido que se está indexando.  Para configurar esto, necesitamos mirar el archivo indexing_config.xml que nos permite especificar reglas de indexación.

  • En las versiones de CQ <= 5.4, el archivo de configuración predeterminado indexing_config.xml se puede encontrar en crx-quickstart/server/runtime/0/_crx/WEB-INF/classes.
  • En CQ 5.5, el archivo de configuración predeterminado está incrustado en el paquete de repositorios implementado en el contenedor OSGi.
Consulte la siguiente página de documentación de Apache Jackrabbit para más detalles sobre laconfiguración de indexación: http://wiki.apache.org/jackrabbit/IndexingConfiguration

Para añadir una configuración de indexación personalizada:
  1. Copie el archivo de configuración del índice de búsqueda predeterminado indexing_config.xml en crx-quickstart/repository/workspaces/crx.default/indexing_config.xml.
    * Para CQ5.4 y versiones anteriores puede encontrar este archivo en crx-quickstart/server/runtime/0/_crx/WEB-INF/classes/indexing_config.xml.
    * Para CQ5.5, copiamos el archivo predeterminado indexing_config.xml a continuación para su conveniencia.
  2. Ahora podemos establecer una ruta para nuestro indexing_config.xml personalizado en el elemento SearchIndex de workspace.xml.  Abra crx-quickstart/workspaces/crx.default/workspace.xml en un editor de texto y añada un parámetro indexingConfiguration como se muestra a continuación:
    ...
     <SearchIndex class="com.day.crx.query.lucene.LuceneHandler"> <param name="path" value="${wsp.home}/index"/> <param name="resultFetchSize" value="50" /> <param name="indexingConfiguration" value="${wsp.home}/indexing_config.xml"/> </SearchIndex> 
    ...


Para una referencia de las funciones de búsqueda disponibles en CRX, consulte aquí.

Se aplica a

CQ 5.2+

indexing_config.xml desde CQ5.5

<?xml version="1.0"?>
<!DOCTYPE configuration SYSTEM "http://jackrabbit.apache.org/dtd/indexing-configuration-1.2.dtd">
<configuration
xmlns:cq="http://www.day.com/jcr/cq/1.0"
xmlns:dam="http://www.day.com/dam/1.0"
xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
xmlns:sling="http://sling.apache.org/jcr/sling/1.0">

<!-- No indexar el contenido de los subactivos -->
<index-rule nodeType="nt:resource"
condición="ancestor::subassets/@jcr:primaryType='{http://www.jcp.org/jcr/nt/1.0}unstructured'">
</index-rule>

<!--
Exclusión de algunas propiedades bien conocidas del ámbito del nodo
índice de texto completo. No añada reglas por debajo de ésta, ya que
esta regla coincide con cualquier nodo y actúa como un valor predeterminado/retroceso.
-->
<index-rule nodeType="nt:base">
<property nodeScopeIndex="false">analyticsProvider</property>
<property nodeScopeIndex="false">analyticsSnippet</property>
<property nodeScopeIndex="false">hideInNav</property>
<property nodeScopeIndex="false">offTime</property>
<property nodeScopeIndex="false">onTime</property>
<property nodeScopeIndex="false">cq:allowedTemplates</property>
<property nodeScopeIndex="false">cq:childrenOrder</property>
<property nodeScopeIndex="false">cq:cugEnabled</property>
<property nodeScopeIndex="false">cq:cugPrincipals</property>
<property nodeScopeIndex="false">cq:cugRealm</property>
<property nodeScopeIndex="false">cq:designPath</property>
<property nodeScopeIndex="false">cq:isCancelledForChildren</property>
<property nodeScopeIndex="false">cq:isDeep</property>
<property nodeScopeIndex="false">cq:lastModified</property>
<property nodeScopeIndex="false">cq:lastModifiedBy</property>
<property nodeScopeIndex="false">cq:lastPublished</property>
<property nodeScopeIndex="false">cq:lastPublishedBy</property>
<property nodeScopeIndex="false">cq:lastReplicated</property>
<property nodeScopeIndex="false">cq:lastReplicatedBy</property>
<property nodeScopeIndex="false">cq:lastReplicationAction</property>
<property nodeScopeIndex="false">cq:lastReplicationStatus</property>
<property nodeScopeIndex="false">cq:lastRolledout</property>
<property nodeScopeIndex="false">cq:lastRolledoutBy</property>
<property nodeScopeIndex="false">cq:name</property>
<property nodeScopeIndex="false">cq:parentPath</property>
<property nodeScopeIndex="false">cq:segments</property>
<property nodeScopeIndex="false">cq:siblingOrder</property>
<property nodeScopeIndex="false">cq:template</property>
<property nodeScopeIndex="false">cq:trigger</property>
<property nodeScopeIndex="false">cq:versionComment</property>
<property nodeScopeIndex="false">jcr:createdBy</property>
<property nodeScopeIndex="false">jcr:lastModifiedBy</property>
<property nodeScopeIndex="false">sling:alias</property>
<property nodeScopeIndex="false">sling:resourceType</property>
<property nodeScopeIndex="false">sling:vanityPath</property>
<property isRegexp="true">.*:.*</property>
</index-rule>

<!-- Cq Page for jcr:contains(jcr:content, "...") searches -->
<aggregate primaryType="cq:PageContent">
<include>*</include>
<include>*/*</include>
<include>*/*/*</include>
<include>*/*/*/*</include>
</aggregate>

<aggregate primaryType="dam:Asset">
<include>jcr:content</include>
<include>jcr:content/metadata</include>
<include>jcr:content/metadata/*</include>
<include>jcr:content/renditions</include>
<include>jcr:content/renditions/original</include>
<include>jcr:content/renditions/original/jcr:content</include>
<!-- child axis orderby index -->
<include>jcr:content/renditions/original/jcr:content/jcr:lastModified</include>
</aggregate>

<!-- nt:file child axis orderby index -->
<aggregate primaryType="nt:file">
<include>jcr:content</include>
<include>jcr:content/jcr:lastModified</include>
</aggregate>

<!-- cq:Page child axis orderby index -->
<aggregate primaryType="cq:Page">
<include>jcr:content</include>
<include>jcr:content/cq:lastModified</include>
</aggregate>

</configuration>