Ampliar el sistema buscador de Drupal

Entre los sistemas integrados en un CMS que deben funcionar con eficacia se encuentra el sistema buscador. Es muy interesante que un CMS contenga un buscador pero cuando empiezas a usar la web en profundidad, se generan muchos contenidos (páginas o nodos en terminología Drupal), hay permisos, y diferentes perfiles de usuarios, la web se hace más compleja y no hay interés en que el buscador arroje como resultados cualquier página de la web, hay que empezar a ampliar este sistema. El buscador de módulos de Drupal nos arroja 219 módulos encontrados para ampliar el sistema buscador en Drupal 6, y 203 para Drupal 7 (aunque en el fondo no todos actúan directamente sobre el sistema buscador).

Una necesidad muy normal es que la web no muestre como resultados algunos de los tipos de contenido que se han creado. Generar tipos de contenido es Drupal es tan fácil que no hay inconveniento en tener algunos para tareas auxiliares, para gestionar elementos internos de la web. El sistema de Drupal está tan integrado entre todos sus módulos que los módulos de permisos sobre visualización de contenidos se interpondrán en los resultados y no mostrarán los que no correspondan al usuario que realiza la consulta. Pero desaconsejo este camino, pues los módulos de permisos sobre la visualización de contenidos enlentecen la web, generan procesos nuevos sobre todos los nodos que son muy largos y nos añaden una capa de complejidad innecesaria, sobre todo si los requerimos solo para el buscador.

La solución a este problema es el módulo "Search config". Este módulo tanto disponible en Drupal desde la versión 4 hasta la 7 actual añade muchas funcionalidades en el sistema de permisos y en la misma página de configuración del sistema de búsqueda. Las dos principales en este caso es que en la tabla de permisos permite ajustar para cada tipo de contenido qué roles pueden buscar dentro de éste. Esto nos permite extender mucho el uso del buscador general en webs que tienen intranets con diversos roles actuando sobre diversas tipologías de datos. Además en Drupal 7 permite cambiar muchos elementos del interface del buscador avanzado, con lo que podemos hacer un poco a nuestra medida el sistema de búsqueda avanzada.

Pero aún podemos ir un paso más allá en Drupal con el módulo "Search API" buscador alternativo de sistema facetado. De hecho éste módulo es el centro de toda una familia de módulos que usan su API para añadir más funcionalidades y se usa en total substitución del sistema buscador core de Drupal. Search API propone un sistema de búsquedas equivalente a Solr o Sphinx, mucho más fácil de configurar. Óbviamente solo queda circunscrito a la base de datos de Drupal, mientras que esos sistemas no. Disponemos en Drupal de integración de Solr o Sphinx (y de hecho la web de drupal.org usa un buscador Solr), pero son difíciles de configurar y de hecho están basados en soluciones Java totalmente externas a Drupal. Search API nos permite gozar de muchas de esas funcionalidades, y es extremadamente configurable.

Search API requiere crear sus propios conjuntos de índices, pero estos índices pueden ser sobre cualquier campo de cualquier entidad. Esto hace crecer la base de datos pero aumenta la capacidad de ofrecer resultados. Además permite crear tantos bloques laterales como queramos, de elementos que se convierten en filtros, filtros que se irán añadiendo sucesivamente. Para los resultados se requiere o bien usar un módulo de página de resultados o una alternativa que permite usar Views como generador de la página de resultados, con lo que aún se extienden más las posibilidades. Entre algunas interesantes extensiones nos encontramos la posibilidad de que la caja del buscador nos haga sugerencias, algo que en un buscador de una web con muchos contenidos puede hacer muy intuitivo el uso para los usuarios de la web. Una ventaja enorme de Search API sobre el buscador core de Drupal es que a diferencia del core que solo crear un motor buscador con un solo sistema de índices, Search API permite crear tantos buscadores separados como queramos sobre cualquier área de la web y con tantos filtros a medida como campos tengan esas entidades implicadas.

Si no queremos complicarnos la vida con Search API pero necesitamos buscadores específicos para tipos de contenido concretos podemos trabajar con una solución core del buscador más "Search config" y crear buscadores específicos por cada tipo de contenido con Views. Views es un sistema de listados muy extendido, prácticamente cada web hecha en Drupal usa Views. Sus filtros expuestos son una forma muy interesante de crear buscadores específicos.

El problema es que esta forma de usar Views no se comportará exactamente como esperamos de un buscador y que por otra parte su trabajo será intenso sobre la base de datos ya que Views no crea índices para mejorar la velocidad con la que encontrar resultados. El primer problema se puede resolver con el módulo "Views Search" para Drupal 6 que añade algunas mejoras en la forma de comportarse del filtro expuesto para que se parezca más a un buscador.

Otra forma de usar Views como motor de un sistema buscador es el módulo "Finder". Este módulo crear bloques laterales con un campo autocompletado cuyo autocompletado es creado por Views. Esto permite que al buscar cosas el campo autocompletado ya nos sugiera posibilidades con la capacidad de que lo haga mostrando tantos campos como queramos, incluidas imágenes, precios o lo que sea necesario.