Por qué el core search de Drupal se rinde antes de tiempo
El módulo search que viene de serie con Drupal 10 (y sigue ahí en 11) cumple cuando tienes cuatro páginas y un blog. En cuanto el sitio crece, la cosa se complica.
El motivo es simple: el buscador interno tira consultas SQL contra search_index y search_dataset, y eso tiene un techo bajo:
- El rendimiento se desploma a medida que la tabla
search_indexengorda; en sitios con decenas de miles de nodos, las consultas conLIKEduelen. - No hay relevancia configurable: olvídate de boost por campo, stemming serio o sinónimos. Lo que ves es lo que hay.
- Cero facetas nativas: si quieres que el usuario filtre por taxonomía, rango de fechas o tipo de contenido, te toca picar código o vivir con vistas y exposed filters torpes.
- Sin autocompletado de fábrica.
- El multilingüe es regular: la tokenización del módulo core no entiende ni stemming en español ni análisis lingüístico por idioma.
Para portales corporativos, e-commerce, intranets con miles de documentos o medios editoriales, estas limitaciones bastan para meter un motor de búsqueda dedicado en la pila.
Qué te llevas cuando enchufas Apache Solr a Drupal
Solr es un motor de búsqueda full-text construido sobre Apache Lucene, y está corriendo en producción en sitios que mueven volúmenes que tu Drupal nunca tendrá. Lo que aporta:
- Índice invertido que devuelve resultados en milisegundos aunque tengas millones de documentos.
- Faceted search de verdad: el usuario filtra dinámicamente por categorías, etiquetas, rangos de precio, fechas y cualquier campo indexado.
- Relevancia configurable: boost por campo (
qf), funciones de scoring (bf),mmpara tolerancia a términos faltantes y perfiles de consulta a medida. - Análisis lingüístico por idioma: stemming, stop words, normalización de acentos y sinónimos, todo configurable.
- Autocompletado y sugerencias alimentadas por el propio índice, sin inventarse términos.
- Escalabilidad horizontal con SolrCloud cuando toque pensar en alta disponibilidad.
La idea de fondo: Drupal hace de CMS, Solr hace de buscador, y cada uno se centra en lo suyo sin pisarse.
Instalación y configuración: Search API y el módulo Solr
Requisitos previos
Lo primero, un Solr funcionando. Las opciones de siempre:
- Instalación local con el paquete oficial de Apache Solr (8.x o 9.x; en proyectos nuevos, 9.x).
- Docker: la imagen oficial
solrte quita problemas en dev y staging. - Servicios gestionados tipo Acquia Search, SearchStax o Websolr si no quieres administrar el servidor.
Módulos en Drupal
Dos módulos que no se discuten:
- Search API (
search_api): la capa de abstracción que define servidores, índices y procesadores con independencia del backend. - Search API Solr (
search_api_solr): el backend de Solr, que habla con el core y genera los ficheros de configuración.
Composer y Drush, lo de toda la vida:
composer require drupal/search_api_solr
drush en search_api search_api_solr -y
Configuración del servidor
En Configuración > Búsqueda y metadatos > Search API, crea un servidor nuevo:
- Backend Solr.
- Host, puerto y ruta del core, por ejemplo
localhost,8983,/solr/drupal. - Si hay autenticación básica o TLS, la pestaña de conexión avanzada es donde lo configuras.
Search API Solr genera por ti los ficheros que el core necesita (schema.xml, solrconfig.xml, los _es.txt para sinónimos y stop words, etc.). Los descargas desde la interfaz, los copias al directorio conf del core y reinicias Solr. Ojo: olvidarse de subir el schema.xml regenerado tras tocar campos es uno de los clásicos del drift entre staging y producción.
Creación del índice
Asocias un índice al servidor y defines:
- Fuentes de datos: típicamente nodos, pero también users, términos de taxonomía o entidades personalizadas.
- Campos a indexar: título, body, campos custom, taxonomías, fecha de publicación, autor. Cada uno con su tipo Solr:
text_espara texto en español (con su analizador),stringpara valores sin tokenizar,integerpara numéricos,datepara fechas. - Procesadores: los componentes que transforman datos antes de indexar o consultas antes de ejecutarse.
Indexación con cabeza: procesadores y campos
Los procesadores de Search API son lo que separa una búsqueda que funciona de una que de verdad sirve. Los que uso en casi todos los proyectos:
- HTML filter: fuera etiquetas, fuera ruido.
- Tokenizer: parte el texto en tokens siguiendo reglas lingüísticas.
- Stemmer: reduce palabras a su raíz para que "configuración" y "configurar" matcheen. En español va con el
SpanishLightStemFilterFactoryque Solr trae de serie. - Stopwords: fuera artículos y preposiciones que no aportan nada.
- Transliteration: normaliza acentos para que "móvil" y "movil" no sean cosas distintas.
- Type boost: sube relevancia a tipos de contenido concretos.
El orden importa, y mucho. Primero limpieza, luego transformación, al final ajuste de relevancia. Cambiar ese orden te puede dejar resultados sin tildes pero con HTML dentro, y entonces toca reindexar.
Indexación inicial desde la interfaz o por Drush:
drush search-api:index nombre_del_indice
En sitios grandes, deja que cron haga la indexación incremental para que los nodos nuevos o editados entren al índice sin reindexar el corpus entero. Las reindexaciones completas en producción son uno de esos placeres que solo se disfrutan a las tres de la mañana.
Facetas personalizadas: filtrado dinámico para el usuario
Las facetas son lo que convierte una caja de búsqueda en una herramienta de exploración. El módulo Facets (facets) se enchufa a Search API y permite construir filtros laterales sobre cualquier campo indexado.
Instalación y configuración básica
composer require drupal/facets
drush en facets -y
En Configuración > Búsqueda y metadatos > Facets, creas una faceta asociada a tu Search API view. Eliges el campo a filtrar y un widget: enlaces, checkboxes, dropdown o rango.
Sobre la implementación de cómo implementar un sistema de búsqueda avanzada con Apache Solr y facetas personalizadas en Drupal, esta es la pieza donde Facets se nota más, sobre todo si combinas widgets distintos por contexto.
Facetas avanzadas y personalizadas
Más allá de lo básico, hay margen para hilar fino:
- Facetas jerárquicas: si la taxonomía tiene árbol (por ejemplo, "Servicios > Desarrollo > Drupal"), la faceta refleja esa estructura y permite drill-down.
- Facetas de rango: para precios, fechas o numéricos. El usuario fija mínimo y máximo.
- Facetas combinadas: varios filtros simultáneos con lógica AND u OR según convenga.
- Facetas dependientes: solo aparecen cuando otra faceta está activa, para no saturar la interfaz cuando el usuario aún no ha decidido nada.
Para algo realmente a medida, implementas un plugin extendiendo WidgetPluginBase del módulo Facets, y desde ahí controlas markup y presentación al milímetro.
Boosting: que lo relevante salga arriba
No todos los campos pesan lo mismo. Que un término aparezca en el título no es lo mismo que aparezca en el body, y Solr te deja afinarlo:
- Field boosting: multiplicador por campo, normalmente en el
qf. Un título con boost 5.0 frente a un body con 1.0 prioriza coincidencias en el titular. - Document boosting: empuja documentos enteros según tipo de contenido, fecha o un campo "destacado", típicamente vía
bfcon una función de decaimiento temporal (recip). - Query-time boosting: reglas de elevación en
elevate.xmlpara fijar resultados concretos arriba en consultas específicas. Útil para términos comerciales que la relevancia natural no acierta.
Esto no se ajusta a ojo: revisa las queries más frecuentes en los logs y verifica que los resultados que deberían salir primero salen primero. Iteración, no adivinación.
Autocompletado: resultados antes de soltar la tecla
El módulo Search API Autocomplete (search_api_autocomplete) añade sugerencias en tiempo real mientras el usuario teclea. Solr alimenta esas sugerencias desde el índice real, así que solo aparecen términos que de verdad tienen resultados detrás (nada de prometer lo que no hay).
composer require drupal/search_api_autocomplete
drush en search_api_autocomplete -y
Lo configuras en la vista de búsqueda correspondiente, eligiendo entre sugerencias basadas en contenido indexado o en historial de búsquedas previas.
Búsqueda multilingüe con Solr
Drupal trae un soporte multilingüe sólido, y Solr lo complementa con naturalidad. Search API Solr crea campos específicos por idioma y aplica el analizador lingüístico correcto a cada uno: text_es con el stemmer en español, text_en con el suyo, etc.
Para que el multilingüe se porte:
- Incluye el campo de idioma en el índice como filtro.
- Comprueba que los ficheros de configuración llevan los analizadores de cada idioma (el módulo los genera, pero conviene verificarlo tras regenerar).
- Configura facetas de idioma si quieres que el usuario filtre por lengua.
- Si tienes traducción parcial, define una estrategia de fallback para que las búsquedas en un idioma devuelvan resultados en el idioma por defecto cuando no haya traducción.
Rendimiento y optimización en producción
Un buscador avanzado pide cariño en rendimiento. Lo que suele marcar diferencia:
- Caché de consultas: Solr cachea filtros y queries frecuentes. Ajusta
queryResultCacheyfilterCacheensolrconfig.xmlsegún el perfil de tu sitio, sin pasarte con la memoria. - Estrategia de commit: nada de commits síncronos por documento. Configura
autoSoftCommitcada pocos segundos para visibilidad rápida sin matar al servidor. - Segmentos y merge: programa optimizaciones del índice en horarios de bajo tráfico, no en mitad del Black Friday.
- Réplicas de lectura: en escenarios de alta concurrencia, SolrCloud con varias réplicas reparte la carga de consultas.
- Lazy loading de facetas: cárgalas por AJAX para no bloquear el renderizado de la página de resultados.
Monitorización y diagnóstico
Una vez en producción, hace falta visibilidad:
- Panel de administración de Solr: estadísticas del core, uso de caché, queries lentas y estado de réplicas.
- Logs de consultas: activa el slow query log de Solr para detectar lo que se pasa de tiempo.
- Search API reports: el propio módulo te da el estado de la indexación, documentos pendientes y errores.
- Stack externo: integra Solr con Prometheus y Grafana para dashboards y alertas en tiempo real.
Y revisa con cierta frecuencia las búsquedas con cero resultados: te van a chivar contenido que falta, sinónimos que tendrías que estar configurando en synonyms_es.txt, o errores tipográficos recurrentes que el componente de sugerencias de Solr puede manejar sin despeinarse.
Búsqueda real: cuando el usuario encuentra lo que ni sabía que buscaba
Montar Apache Solr con facetas personalizadas en Drupal no es cambiar un módulo por otro: es replantear cómo la gente encuentra cosas en tu sitio. Pasas de una caja de texto pasiva a una herramienta de exploración que se adapta al contenido que ya tienes.
El trabajo de configuración se recupera en métricas: menos rebote, más tiempo en página y, en e-commerce, conversión directa. La regla es simple: el usuario que encuentra lo que busca, vuelve.
Si tu Drupal se ha quedado pequeño con su buscador nativo, hablemos del salto a Solr sin sorpresas en producción.
Preguntas frecuentes sobre
Como mejorar mi negocio con la metodología Anticompetencia
En Tangram no queremos que la información pase por una cadena interminable de intermediarios donde se pierden los detalles importantes.
Contarás con un interlocutor que coordinará la comunicación y trasladará las decisiones al equipo responsable de tu proyecto.
Cuando sea necesario profundizar en cuestiones de estrategia, diseño o tecnología, podremos involucrar a los especialistas correspondientes.
Así tendrás una comunicación organizada, sin necesidad de gestionar personalmente a todos los profesionales que intervienen.
Queremos que tengas acceso al conocimiento de un equipo especializado, sin sufrir la complejidad de coordinarlo.
No tendrás que averiguar a quién escribir cada vez que tengas una duda.
En Tangram contemplamos la figura del Account Manager como interlocutor principal, encargado de acompañarte durante el proyecto, coordinar la comunicación y facilitar el seguimiento de las decisiones.
Nuestra metodología incluye reuniones de revisión, canales de comunicación y herramientas para que puedas participar en el trabajo.
La organización concreta, la frecuencia de las reuniones y los canales disponibles se establecerán según el proyecto contratado.
Lo importante es que sepas con quién hablar, en qué punto está tu proyecto y qué decisiones necesitan tu participación.
Sí, podemos valorar una colaboración con los profesionales que ya trabajan en tu empresa.
No siempre tiene sentido sustituir un equipo que conoce bien tu negocio. En muchas situaciones, lo más útil es complementar sus conocimientos con especialistas en determinadas áreas.
Podemos estudiar qué responsabilidades asumiría Tangram, cuáles mantendría tu equipo y cómo coordinar las decisiones para evitar duplicidades.
La forma concreta de colaboración dependerá de la organización, las herramientas y las necesidades del proyecto.
No se trata de reemplazar lo que ya funciona, sino de aportar el conocimiento que necesitas para llegar más lejos.
No tienes por qué cambiar de proveedor para explorar una colaboración con Tangram.
Durante nuestra trayectoria hemos trabajado con agencias y consultoras, participando en proyectos en los que cada empresa asumía una parte diferente del trabajo.
Esa experiencia nos permite comprender la importancia de definir responsabilidades y coordinar a los profesionales implicados.
Podemos valorar una colaboración para cubrir necesidades concretas que tu proveedor actual no ofrece o para reforzar determinadas áreas.
Si tienes una relación profesional que funciona, no queremos que la rompas sin motivo. Queremos encontrar dónde podemos aportar valor.
La confidencialidad es especialmente importante cuando hablamos de nuevas ideas de negocio, información económica, estrategias comerciales o desarrollos tecnológicos.
En Tangram tenemos experiencia trabajando en proyectos sujetos a acuerdos de confidencialidad, motivo por el que no podemos mostrar públicamente muchos de los trabajos en los que hemos participado.
Si tu proyecto requiere un acuerdo de confidencialidad (NDA) antes de compartir información sensible, podemos revisar sus condiciones y acordar cómo proteger esa información antes de entrar en los detalles.
Entendemos que la confianza empieza por respetar lo que todavía no quieres hacer público.