Error en Collector ByQuery (Solr) en OpenCms 8.5

11/01/2013       Sergio Raposo Vargas       OpenCms 8, Programación

En OpenCms 8.5 disfrutamos de una de las grandes integraciones realizadas por Alkacon en las últimas versiones, la integración total con Solr que viene a sustituir, a lucene para las búsqueda de contenido.

Como bien comentan en la documentación oficial podemos usar Solr de 3 formas distintas:

  • Mediante el uso de un nuevo Collector llamado ByQuery
  • Mediante una api completa que nos permite realizar la consulta necesaria
  • Mediante un Servlet que está activo y mediante una petición http podremos obtener el resultado en XML o JSON

 

La primera de las opciones podemos usarlo con el clásico contentload que nos va a permitir hacer un listado de contenido trayendo los contenidos directamente de solr y usando su amplias opciones para generar la consulta deseada.

El sistema funciona perfectamente, menos por un detalle, por defecto el collector está configurado para traer como máximo 50 registro por búsqueda, aunque el resultado de solr devuelva más. El problema viene derivado por una constante en el CmsSolrIndex donde tienen una constante MAX_ROWS = 50. Existe un parámetro en la llamada al resultado (un booleano) con el que podemos indicar que ignore ese MAX_ROWS y coja el que establezcamos nosotros en la consulta, pero por defecto el collector no lo envía. Si nos vamos a la clase CmsSolrCollector.java, vemos en la línea 138 el siguiente código:

return new ArrayList<CmsResource>(index.search(cms, q));

 

En la clase CmsSolrIndex existe también el siguiente método:

public synchronized CmsSolrResultList search(CmsObject cms, final CmsSolrQuery query, boolean ignoreMaxRows)

 

En este método podemos enviar un boolean indicando que ignore el MaxRows por defecto, el cual por defecto se está enviando a false. Tan solo tenemos que modificar esta clase para enviar este parámetro a true y con esto arreglaremos el problema.

return new ArrayList<CmsResource>(index.search(cms, q , true));

 

Para esto, yo recomiendo seguir los siguientes pasos:

  • Copiar clase y llevarla a nuestro proyecto
  • Modificar la linea comentada y cambiar el nombre del collector (línea 59)
  • Recompilar el proyecto y subirlo
  • Editar el fichero opencms-vfs.xml y añadir la nueva clase creada en el apartado de Collectors
  • Reiniciar el servidor

Con estos pasos ya tendremos saltado el límite de 50 contenidos a mostrar.

 

 

 

 

 OpenCms 8.5, Solr, ByQuery Collector