Search API
Proporciona un marco genérico para crear búsquedas en cualquier Entity de Drupal utilizando backends de búsqueda conectables.
search_api
Install
composer require 'drupal/search_api:8.x-1.40'
Overview
Search API proporciona un marco potente y flexible para la funcionalidad de búsqueda en sitios Drupal. Permite a los administradores y desarrolladores crear soluciones de búsqueda personalizadas utilizando varios motores backend como Apache Solr, Elasticsearch o el backend de base de datos integrado.
El módulo utiliza una arquitectura de plugins con siete tipos de plugins principales: backends (motores de búsqueda), datasources (contenido a indexar), tipos de datos, displays (páginas de búsqueda), modos de análisis (interpretación de consultas), processors (transformaciones de datos) y trackers (detección de cambios). Este diseño extensible permite una personalización profunda de cada aspecto de la experiencia de búsqueda.
Las características principales incluyen integración con Views para construir páginas de búsqueda, soporte de búsqueda facetada a través del módulo Facets, seguimiento automático de contenido y reindexación, soporte multilingüe completo y una interfaz de administración completa para la configuración. El módulo soporta la indexación de cualquier tipo de Entity de contenido incluyendo Node, usuarios, términos de taxonomía y Entities personalizadas.
Features
- Arquitectura basada en plugins con 7 tipos de plugins: backends, datasources, tipos de datos, displays, modos de análisis, processors y trackers
- Integración profunda con Views para crear páginas de búsqueda con filtros expuestos, ordenamientos y facetas
- Soporte para múltiples backends de búsqueda incluyendo Apache Solr, Elasticsearch y búsqueda en base de datos
- Más de 20 processors integrados para transformación de texto, control de acceso, resaltado, stemming y boosting
- Seguimiento automático de Entity y reindexación cuando el contenido cambia
- Soporte completo de búsqueda multilingüe y multi-sitio
- Configuración flexible de Field con mapeo de tipos de datos y factores de boost
- Indexación por lotes basada en Cron y bajo demanda con tamaños de lote configurables
- Extensibilidad basada en eventos reemplazando hooks heredados
- 14 comandos Drush para gestión completa por CLI
- Interfaz de administración completa con tours interactivos
- Modo de índice de solo lectura para entornos de producción
- Soporte para indexación de Field jerárquicos (jerarquías de taxonomía)
- Funcionalidad More Like This para sugerencias de contenido similar
- Capacidad de ordenamiento aleatorio para resultados de búsqueda variados
Use Cases
Búsqueda empresarial con Solr
Para sitios grandes con millones de Nodes, usa Search API con el backend de Solr. Crea índices para diferentes tipos de contenido (artículos, productos, páginas), añade procesadores para filtrado de HTML y stemming, y construye múltiples páginas de búsqueda basadas en Views con filtros expuestos y facetas.
Búsqueda de productos de comercio electrónico
Crea un índice de búsqueda para entidades de productos con campos como título, descripción, SKU, precio y términos de taxonomía. Habilita procesadores para ignorar mayúsculas, stemmer y potenciación de tipo para priorizar productos. Usa el módulo Facets para filtros de rango de precios, categorías y atributos.
Búsqueda unificada multi-sitio
Configura múltiples índices en un servidor Solr compartido para buscar a través de múltiples sitios Drupal. Usa prefijos específicos por sitio y combina con Search API Pages o Views personalizados para resultados unificados.
Búsqueda de directorio de usuarios
Crea un índice con la fuente de datos User para construir un directorio de personal con búsqueda. Indexa campos como nombre, departamento, rol y campos de perfil. Usa procesadores para control de acceso basado en roles.
Búsqueda de biblioteca multimedia
Indexa entidades de Media con campos como nombre, texto alternativo y etiquetas de taxonomía. Habilita el procesador de extracción de contenido de archivos (a través de Search API Attachments) para buscar dentro del contenido de documentos.
Configuración rápida del sitio con Database Defaults
Para sitios simples sin infraestructura Solr, habilita el módulo search_api_db_defaults para obtener instantáneamente una página de búsqueda funcional. El módulo crea un servidor de base de datos, un índice de contenido y una View de búsqueda en /search/content.
Tips
- Usa el módulo Database Search Defaults para una configuración inicial rápida, luego desinstálalo después de la configuración
- Habilita la opción 'Index items immediately' para sitios pequeños, pero deshabilítala para sitios grandes para prevenir problemas de rendimiento
- Configura cron_limit según la capacidad de tu servidor - comienza con 50 y ajusta según la duración del cron
- Usa etiquetas de consulta como 'views_VIEW_ID' para apuntar a búsquedas específicas en los listeners de eventos
- Habilita el procesador Highlight y usa el campo search_api_excerpt en Views para mostrar fragmentos relevantes
- Para sitios en producción, prefiere Solr sobre el backend de base de datos para mejor rendimiento y funcionalidades
- Usa la opción 'Track changes in referenced entities' con cuidado - puede aumentar significativamente la carga de reindexación
- La configuración 'disable_tracking_on_import' de search_api.settings puede acelerar las importaciones de configuración en sitios grandes
- Añade la etiqueta 'search_api_skip_processor_highlight' a las consultas que no necesitan resaltado para mejorar el rendimiento
- Usa los comandos Drush (sapi-*) para una gestión eficiente del índice en scripts de despliegue
Technical Details
Admin Pages 7
/admin/config/search/search-api
Página principal de administración que lista todos los índices de búsqueda y servidores. Muestra el estado de cada índice (habilitado/deshabilitado), progreso de indexación, servidor conectado y proporciona acciones rápidas para gestionar la configuración de búsqueda.
/admin/config/search/search-api/add-server
Crear un nuevo servidor de búsqueda seleccionando un plugin de backend y configurando sus ajustes de conexión.
/admin/config/search/search-api/server/{server_id}
Muestra el estado del servidor, información del backend e índices conectados. Muestra la salud del servidor y permite realizar acciones como limpiar todos los datos indexados.
/admin/config/search/search-api/add-index
Crear un nuevo índice de búsqueda seleccionando fuentes de datos, rastreador, servidor y configurando opciones de indexación.
/admin/config/search/search-api/index/{index_id}
Muestra el estado del índice incluyendo progreso de indexación, estadísticas de fuentes de datos, conexión al servidor y configuración de cron. Proporciona controles para iniciar operaciones de indexación.
/admin/config/search/search-api/index/{index_id}/fields
Configurar qué campos se indexan y sus ajustes incluyendo tipo de datos, factor de impulso y nombre máquina.
/admin/config/search/search-api/index/{index_id}/processors
Habilitar y configurar procesadores que transforman los datos indexados y las consultas de búsqueda.
Permissions 1
Hooks 7
hook_search_api_backend_info_alter
Modifica los backends disponibles de Search API (obsoleto, usar evento en su lugar)
hook_search_api_server_features_alter
Modifica las características que soporta un servidor de búsqueda (obsoleto)
hook_search_api_datasource_info_alter
Modifica los plugins de fuente de datos disponibles (obsoleto)
hook_search_api_processor_info_alter
Modifica los plugins de procesador disponibles (obsoleto)
hook_search_api_index_items_alter
Modifica los elementos antes de indexar (obsoleto)
hook_search_api_query_alter
Modifica la consulta de búsqueda antes de su ejecución (obsoleto)
hook_search_api_results_alter
Modifica los resultados de búsqueda después de la ejecución (obsoleto)
Drush Commands 16
drush search-api:list
Lista todos los índices de búsqueda con su estado, servidor y fuentes de datos
drush search-api:status [index_id]
Muestra el estado de indexación para uno o todos los índices, incluyendo el porcentaje de completado
drush search-api:index [index_id]
Indexa elementos para uno o todos los índices de búsqueda habilitados
drush search-api:enable <index_id>
Habilita un índice de búsqueda deshabilitado
drush search-api:disable <index_id>
Deshabilita un índice de búsqueda habilitado
drush search-api:enable-all
Habilita todos los índices de búsqueda deshabilitados
drush search-api:disable-all
Deshabilita todos los índices de búsqueda habilitados
drush search-api:reset-tracker [index_id]
Marca elementos para reindexación sin eliminar los datos existentes
drush search-api:rebuild-tracker [index_id]
Reconstruye completamente la información del rastreador desde cero
drush search-api:clear [index_id]
Elimina todos los datos indexados y marca para reindexación
drush search-api:search <index_id> <keyword>
Busca una palabra clave en un índice dado
drush search-api:server-list
Lista todos los servidores de búsqueda con su estado
drush search-api:server-enable <server_id>
Habilita un servidor de búsqueda deshabilitado
drush search-api:server-disable <server_id>
Deshabilita un servidor de búsqueda habilitado
drush search-api:server-clear <server_id>
Elimina todos los datos indexados en un servidor de búsqueda
drush search-api:set-index-server <index_id> <server_id>
Establece el servidor para un índice
Troubleshooting 8
Verifica que el índice esté habilitado, que cron_limit sea > 0 y que no haya tareas pendientes. Ejecuta 'drush sapi-s' para verificar el estado y 'drush search-api:index' para activar la indexación manualmente.
Verifica que los elementos estén indexados (revisa la pestaña View del índice), asegúrate de que la View de búsqueda consulte el índice correcto y comprueba que los tipos de campo coincidan con las expectativas de la consulta (fulltext vs string).
Asegúrate de que el usuario de la base de datos tenga el permiso CREATE TEMPORARY TABLES. Esto es necesario para las consultas de agregación de facetas.
Verifica si hay múltiples fuentes de datos o alias. Asegúrate de que los IDs de entidad sean únicos entre fuentes de datos. Revisa la configuración distinct de la View.
Reduce cron_limit para entornos con memoria limitada. Usa indexación por lotes a través de Drush con configuraciones de batch-size apropiadas. Considera deshabilitar la opción index_directly.
Los elementos pueden estar en cola pero aún no indexados. Verifica si hay tareas pendientes, confirma que el cron esté ejecutándose o activa manualmente la reindexación. Si track_changes_in_references está deshabilitado, los cambios en entidades referenciadas no activarán la reindexación.
Para backends externos (Solr/Elasticsearch), verifica que el servidor esté ejecutándose y sea accesible. Revisa la configuración del backend. Consulta los logs de Drupal para mensajes de error específicos.
Reduce batch_size, habilita index_directly para distribuir la indexación en el tiempo, o aumenta memory_limit de PHP. El backend de base de datos consume más memoria que Solr.
Security Notes 7
- El permiso 'administer search_api' otorga control total - asígnalo solo a administradores de confianza
- Habilita el procesador Content access para respetar los permisos de acceso a Nodes en los resultados de búsqueda
- Habilita el procesador Entity status para excluir contenido no publicado de la indexación
- Habilita el procesador Role-based access para visibilidad de contenido específica por rol
- Revisa cuidadosamente los campos indexados - evita indexar datos sensibles que no deberían ser buscables
- El backend de base de datos almacena datos indexados en tablas de la base de datos - asegura la seguridad apropiada de la base de datos
- Al usar backends externos como Solr, asegura la conexión y restringe el acceso al servidor