Lección 9 de 20 · Lectura y práctica
Práctica: Construir un sistema de búsqueda para un e-commerce
Concepto claveEn un e-commerce moderno, la búsqueda full-text avanzada no es solo encontrar productos por nombre, sino un sistema que entiende intención del usuario, maneja sinónimos, corrige errores tipográficos, y prioriza.
Del concepto a la práctica
Taller de esta lección
Una búsqueda comercial útil combina intención textual y restricciones verificables. Para una consulta de zapatillas, el texto decide relevancia; precio, stock y talla limitan el conjunto; la valoración puede ordenar preferencias, pero no reemplaza la disponibilidad.
Ejemplo resuelto
Usa cuatro documentos: A={nombre:"zapatillas correr",descripcion:"uso diario",categoria:"calzado",precio:60,stock:2,valoracion:4}; B={nombre:"zapatillas correr",descripcion:"uso deportivo",categoria:"calzado",precio:75,stock:1,valoracion:5}; C={nombre:"zapatillas correr",descripcion:"sin disponibilidad",categoria:"calzado",precio:50,stock:0,valoracion:4}; D={nombre:"bota senderismo",descripcion:"uso montaña",categoria:"calzado",precio:70,stock:3,valoracion:5}. Todos los precios están en euros ficticios. La consulta busca zapatillas correr, filtra stock > 0 y categoria = calzado, y añade valoración solo como señal secundaria.
Pruébalo
Indexa los cuatro registros con categoría, descripción, precio, stock y valoración.
Aplica
multi_matcha nombre y descripción.Coloca categoria=calzado, precio<=80 y stock>0 en filter. Usa multi_match con operator:and para requerir los términos de zapatillas correr; no relies en categoría calzado para excluir botas.
Verifica resultados y calcula el precio medio de los disponibles.
Comprueba tu resultado
Error frecuente: filtrar stock con term cuando contiene cantidades. Corrige con range y gt: 0. El ejercicio debe excluir la bota y el artículo agotado; la media de 60 y 75 es 67.50 euros.

Mapa de prácticaEl analizador convierte texto en términos que la consulta utiliza para buscar documentos. Los filtros restringen qué documentos pueden aparecer y el ranking ordena los resultados según relevancia; filtrar no significa aumentar la puntuación. En un recorrido independiente, las agregaciones resumen grupos de datos para un dashboard. Las cifras y gráficos de ese recorrido son ilustrativos, no una medición de rendimiento.
Ver la infografía en tamaño completo ↗Concepto clave
En un e-commerce moderno, la búsqueda full-text avanzada no es solo encontrar productos por nombre, sino un sistema que entiende intención del usuario, maneja sinónimos, corrige errores tipográficos, y prioriza resultados por relevancia comercial. Piensa en Amazon: cuando buscas "laptop gaming", el sistema no solo busca coincidencias exactas, sino que entiende que "gaming" implica alta RAM, tarjeta gráfica dedicada, y procesadores específicos, mostrando primero los productos con mejor relación calidad-precio y disponibilidad.
Elasticsearch logra esto mediante Query DSL (Domain Specific Language), que permite combinar múltiples tipos de consultas en una sola búsqueda. Por ejemplo, puedes mezclar match queries para texto libre con term queries para filtros exactos como categorías, y aplicar boosting para dar más peso a productos en oferta o con mejor valoración. La analogía es un chef experto: no sigue una receta simple, sino que ajusta ingredientes (consultas) en tiempo real para crear el plato perfecto (resultado relevante).
Cómo funciona en la práctica
Imagina que tienes un índice de productos con campos como title, description, category, price, rating, y stock. Para construir una búsqueda avanzada, sigues estos pasos:
- Analiza el texto de entrada: Usa un analizador personalizado que aplique lowercase, elimine stopwords (como "el", "la"), y expanda sinónimos (ej., "pc" → "computadora", "ordenador").
- Combina consultas con bool query: Crea una consulta booleana con secciones
must(requerido),should(opcional pero aumenta relevancia), yfilter(exacto, sin afectar scoring). - Aplica scoring personalizado: Usa funciones como
field_value_factorpara dar más peso a productos con alto rating o bajo precio.
Ejemplo de código básico:
{
"query": {
"bool": {
"must": [
{"match": {"title": "laptop gaming"}}
],
"should": [
{"match": {"description": "rápida"}},
{"term": {"category": "electrónica"}}
],
"filter": [
{"range": {"price": {"lte": 1000}}},
{"term": {"stock": true}}
]
}
}
}Caso de estudio
Una tienda online de ropa implementó Elasticsearch para mejorar su búsqueda. Antes, los usuarios que buscaban "vestido verano" solo veían productos con esas palabras exactas, perdiendo ventas en artículos etiquetados como "vestido playa" o "vestido ligero". La solución fue:
- Crear un mapeo con campos
title(texto analizado) ytitle.keyword(exacto para filtros). - Configurar un analizador con sinónimos en un archivo
synonyms.txt: "verano, playa, calor, ligero". - Usar una multi-match query para buscar en
titleydescriptionsimultáneamente. - Añadir un script_score para priorizar productos con descuentos mayores al 20%.
Resultado: Aumento del 30% en conversiones desde búsqueda, y reducción del 40% en búsquedas sin resultados.
Dato clave: En e-commerce, el 43% de los usuarios abandona el sitio si la búsqueda no devuelve resultados relevantes en los primeros 3 segundos (estudio de Baymard Institute).
Errores comunes
- Usar solo match queries sin filtros: Esto devuelve demasiados resultados irrelevantes. Solución: Siempre combinar con
filterpara restringir por categoría, precio, o disponibilidad. - Ignorar el análisis de texto: No configurar analizadores personalizados lleva a que "camiseta" y "camisetas" sean tratados como términos diferentes. Solución: Usar stemmers o lematizadores en español.
- Sobrecargar el scoring con muchos should clauses: Añadir más de 5-10 cláusulas
shouldpuede ralentizar la búsqueda. Solución: Priorizar conboosty limitar a los campos más importantes. - No probar con datos reales: Desarrollar con un dataset pequeño y luego fallar en producción. Solución: Usar herramientas como Kibana Dev Tools para simular tráfico alto.
- Olvidar la paginación: Devolver miles de resultados en una sola consulta. Solución: Implementar
fromysize, y considerarsearch_afterpara resultados profundos.
Checklist de dominio
- Puedo diseñar un mapeo de índice con campos text y keyword apropiados para un catálogo de e-commerce.
- Sé configurar analizadores personalizados con sinónimos y filtros para español.
- Puedo construir una bool query que combine must, should, y filter para una búsqueda compleja.
- Entiendo cómo usar field_value_factor y script_score para ajustar relevancia basada en métricas comerciales.
- Sé implementar paginación eficiente y manejar grandes volúmenes de resultados.
- Puedo medir el rendimiento de búsquedas usando Kibana y ajustar consultas según métricas.
- Sé crear un pipeline de ingestión para enriquecer datos antes de indexar (ej., añadir etiquetas de temporada).
Implementa una búsqueda avanzada para una tienda de electrónicos
En este ejercicio, crearás un sistema de búsqueda full-text para una tienda online de electrónicos usando Elasticsearch 8.x. Sigue estos pasos:
- Prepara el entorno: Instala Elasticsearch y Kibana localmente o usa un cloud service. Crea un índice llamado
electronics_storecon este mapeo:PUT /electronics_store { "mappings": { "properties": { "name": {"type": "text", "analyzer": "spanish"}, "category": {"type": "keyword"}, "price": {"type": "float"}, "rating": {"type": "float"}, "stock": {"type": "boolean"}, "tags": {"type": "text", "analyzer": "spanish"} } } } - Indexa datos de ejemplo: Inserta al menos 10 documentos con productos como laptops, smartphones, y accesorios. Usa este ejemplo y modifícalo:
POST /electronics_store/_doc/1 { "name": "Laptop Gaming ASUS", "category": "laptops", "price": 1200.00, "rating": 4.5, "stock": true, "tags": "rápida, potente, gaming" } - Construye una consulta avanzada: Crea una búsqueda que:
- Busque en
nameytagscon un término como "laptop rápida". - Filtre por categoría "laptops" y stock disponible.
- Aumente la relevancia de productos con rating mayor a 4.0.
- Ordene por precio ascendente como desempate.
- Busque en
- Optimiza el análisis: Configura un analizador personalizado en el índice que expanda sinónimos (ej., "rápida" → "veloz", "ágil") y aplica a los campos de texto.
- Prueba y mide: Ejecuta la búsqueda con diferentes términos y verifica los resultados. Usa el endpoint
_searchconexplain: truepara entender el scoring.
Pistas
- Usa una bool query con must para el término de búsqueda, filter para categoría y stock, y should para rating alto.
- Para el analizador personalizado, define un settings en el índice con un filter de sinónimos basado en un archivo o lista inline.
- Considera usar field_value_factor en una function_score query para ajustar el scoring basado en rating.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.
Sigue con Implementación Avanzada de Búsqueda Full-Text y Analytics con Elasticsearch y Kibana
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.