Búsqueda avanzada con facetas en Drupal: guía completa
El problema de la búsqueda nativa y por qué necesitas facetas
El módulo Search del núcleo de Drupal sirve para lo que sirve: indexa nodos y los devuelve por relevancia simple. Un blog con cincuenta entradas, una intranet pequeña: vale. En cuanto el contenido crece o el usuario llega con consultas compuestas, se queda corto rápido.
No filtra por campos concretos, no combina criterios y su scoring no se afina. Pon a un usuario buscando "formación presencial en Madrid sobre gestión de proyectos" en un portal con miles de cursos y le devuelves una lista plana que tiene que peinar a mano. Mal negocio.
Aquí entran las facetas. Una faceta es un filtro dinámico ligado a un campo indexado; el usuario va estrechando el resultado clic a clic. Modalidad (presencial / en línea), ubicación (Madrid, Barcelona, Valencia), categoría temática: de mil a doce resultados en tres clics. Eso es lo que hay que entregar.
Esta guía describe cómo montar búsqueda avanzada con facetas en Drupal 10 con Search API, un motor de indexación externo y el módulo Facets.
Arquitectura de la solución: Search API, motor de indexación y Facets
Antes de instalar nada, conviene tener claro cómo encajan las piezas.
Search API como capa de abstracción
Search API es la capa que te abstrae del motor. Define tres conceptos que conviene grabar: servidor (la conexión con el motor), índice (qué se indexa y con qué campos) y procesadores (transformaciones aplicadas en indexación o consulta).
La ventaja práctica: cambias de backend sin tocar vistas ni facetas. Arrancas con el backend de base de datos y migras a Solr cuando el volumen lo pida, sin reescribir la capa de presentación.
Elección del motor de búsqueda
Tres opciones reales:
Backend de base de datos (search_api_db): viene con Search API. Cero infraestructura extra. Sirve por debajo de unos diez mil nodos. Soporta facetas, pero el full-text es flojo comparado con motores especializados.
Apache Solr (search_api_solr): el caballo de batalla en Drupal. Análisis lingüístico decente (lematización, sinónimos, spellcheck), rendimiento sólido con millones de documentos y facetas nativas. Pide un Solr aparte, lo cual asusta menos de lo que parece.
Elasticsearch (elasticsearch_connector + search_api_elasticsearch): capacidades parecidas. Tiene sentido si ya tienes Elasticsearch corriendo para logs u otra cosa. El conector con Drupal ha mejorado, pero sigue por detrás de Solr en madurez.
Mi recomendación, sin rodeos: si necesitas facetas serias en Drupal y no tienes una razón concreta para usar Elasticsearch, usa Solr. El ecosistema está más rodado.
Módulo Facets
Facets se engancha a cualquier índice de Search API y genera bloques de filtros a partir de los campos indexados. Cada faceta es un bloque que colocas donde quieras. El módulo gestiona las URLs filtradas, los recuentos por valor y la actualización de las facetas disponibles según lo que el usuario vaya marcando.
Instalación y configuración paso a paso
Paso 1: Instalar los módulos con Composer
Desde la raíz del proyecto, Composer trae Search API (que ya incluye el backend de base de datos), luego el módulo de integración con Solr si vas por ahí, y por último Facets.
Activación desde extensiones o con Drush, lo que prefieras. Search API primero; lo que dependa de él después.
Paso 2: Configurar el servidor de búsqueda
En la admin de Search API se crea un servidor nuevo. Para el backend de base de datos basta con marcar "Base de datos" y ponerle nombre.
Para Solr: dirección, puerto (8983 por defecto), ruta del núcleo y protocolo. Search API Solr genera los ficheros de configuración del núcleo (schema.xml, solrconfig.xml y los de análisis lingüístico) adaptados a la versión de Solr y al idioma del sitio. Este paso no es opcional: si los despliegas mal, la búsqueda en español se rompe en lematización y acentos. Copias los ficheros al directorio de configuración del núcleo de Solr y reinicias el servicio. Sin atajos.
Paso 3: Crear y configurar el índice
El índice define qué entidades se indexan y qué campos quedan expuestos. Piensa el índice como una tabla denormalizada: cada documento es un nodo aplastado con sus campos relevantes. Se crea apuntando al servidor.
Fuentes de datos: normalmente nodos. También términos de taxonomía, usuarios o entidades personalizadas si lo necesitas.
Campos indexados: a cada campo le toca un tipo en el índice:
- Texto completo (Fulltext): para búsqueda textual (título, cuerpo, resumen).
- Cadena (String): para facetas exactas (categoría, tipo, estado).
- Entero o decimal: para campos numéricos filtrables (precio, año).
- Fecha: para rangos temporales.
Regla práctica: si va a ser faceta, no lo metas como Fulltext. Te ahorras dolor.
Procesadores que en español hacen falta sí o sí:
- Ignorar mayúsculas: "Drupal" y "drupal" deben devolver lo mismo.
- Lematización: "formaciones" tiene que encontrar "formación". No negociable.
- Ignorar caracteres: normaliza acentos. El usuario español no siempre escribe tildes; asúmelo.
- Palabras vacías: fuera artículos y preposiciones del índice. La relevancia mejora visiblemente.
Configurado el índice, lanzas la indexación inicial. Con miles de nodos, mejor por lotes con Drush. Hacerlo desde la UI es invitación al timeout.
Paso 4: Crear la vista de resultados
Search API se integra con Views. Vista nueva con el índice como fuente, un campo de texto expuesto como filtro, los campos de presentación (título enlazado, resumen, imagen), orden por relevancia y paginación. La ruta de la vista será la URL de búsqueda.
Configuración de facetas: del campo indexado al filtro visible
Con índice y vista en pie, toca crear las facetas.
Crear una faceta
En la admin de Facets añades una y configuras:
- Fuente: la vista de resultados y su visualización concreta.
- Campo: el campo indexado que la alimenta. Tiene que ser cadena, entero o fecha; Fulltext no vale.
- Complemento de presentación: lista de enlaces (lo más común), checkboxes, desplegable o slider para rangos numéricos.
Opciones de configuración avanzada
Cada faceta trae ajustes que se notan en producción:
- Operador lógico: AND (cumplen todos los criterios) u OR (al menos uno). Para categorías, casi siempre OR; para características obligatorias (idioma, tipo de documento), AND. Equivocarse aquí frustra al usuario sin que sepa por qué.
- Ordenación: alfabética, por recuento o peso manual.
- Límite de elementos: si una faceta tiene cientos de valores, muestras los más frecuentes y un "Mostrar todos".
- Faceta jerárquica: para taxonomías en árbol (país, comunidad, provincia) hay visualización jerárquica nativa.
- Ocultar faceta vacía: si al filtrar una faceta se queda sin valores, se oculta sola. Activado siempre.
Colocar las facetas en la página
Cada faceta es un bloque, colocado por el sistema de bloques o por Layout Builder. Lo habitual: columna lateral izquierda; en móvil, panel desplegable. La visibilidad del bloque se restringe a la ruta de la vista de resultados, no la dejes flotando por todo el sitio.
Optimización del rendimiento y la experiencia de usuario
Actualización sin recarga de página
Por defecto, cada clic recarga la página entera. Mata la experiencia. Facets trae integración AJAX que actualiza solo resultados y facetas. Se activa desde la configuración de la vista y exige que los bloques de facetas estén en la misma región AJAX. Acuérdate de esto último: es donde más gente se atasca.
Sugerencias y autocompletado
Search API Autocomplete añade sugerencias mientras el usuario escribe. Pueden venir de términos del índice o de títulos de contenido. Yo arranco con tres caracteres mínimos, ocho sugerencias y recuento visible. Después se ajusta con datos reales.
Sinónimos y corrección ortográfica
Solr permite mantener un fichero de sinónimos para que términos equivalentes devuelvan lo mismo (útil en sectores con jerga: "RR.HH.", "recursos humanos", "people"). La corrección ortográfica ("Quizás quisiste decir...") va por el componente SpellChecker de Solr y aparece cuando la consulta devuelve pocos resultados. Boost por tipo de contenido o por fecha también se afina aquí, en el schema.xml y en solrconfig.xml.
Si necesitas asesoramiento para diseñar e implementar un sistema de búsqueda avanzada en tu sitio Drupal, consulta con nuestro equipo técnico especializado para analizar los requisitos de tu proyecto.
Pruebas, mantenimiento y evolución del sistema de búsqueda
Pruebas funcionales
Antes de salir a producción, verifica que cada faceta filtra lo que tiene que filtrar, que la combinación de varias produce resultados coherentes y que la paginación aguanta con filtros aplicados. Casos límite obligatorios: consultas sin resultados, caracteres especiales, facetas con un solo valor disponible. Search API trae una API programática para montar índices de prueba dentro de PHPUnit; úsala, evita los tests manuales repetitivos.
Monitorización del índice
El panel de Search API enseña el estado del índice: elementos indexados, pendientes y errores. Tarea cron con indexación incremental cada pocos minutos, sin más debate. Si tienes Solr, su consola te da métricas que valen su peso: tiempo medio de consulta, consultas frecuentes y, sobre todo, consultas con cero resultados. Esas últimas son oro: te dicen qué contenido falta o qué sinónimo no has añadido todavía.
Evolución progresiva
La base aguanta más de lo que parece. Sobre ella puedes encajar búsqueda geoespacial (Solr soporta consultas por proximidad), elevación manual de resultados para queries concretas, contextual filters por idioma o sección, analítica de búsquedas conectada a tu herramienta de tracking y, si la organización gestiona varios sitios Drupal, búsqueda federada contra un Solr centralizado.
Lo importante: cada extensión se apoya en el mismo Search API y el mismo módulo Facets que montaste el primer día. El esquema bien pensado al principio se paga solo durante años, sin tener que rehacer la capa de búsqueda cada vez que el negocio pide algo nuevo.