Saltar al contenido

Lección 3 de 20 · Lectura y práctica

Crear un índice optimizado para un dataset de productos

Tipo de lección: VideoConcepto claveDiseñar un índice optimizado en Elasticsearch para un dataset de productos es como construir una biblioteca especializada. En lugar de organizar libros por título o autor, creas un sistema.

Del concepto a la práctica

Taller de esta lección

Un índice de productos necesita representar usos diferentes del mismo dato. El nombre se busca como texto, el identificador se filtra exactamente y el precio participa en rangos y métricas. Un multifield evita elegir entre búsqueda lingüística y ordenación exacta.

Ejemplo resuelto

json
{"mappings":{"properties":{"nombre":{"type":"text","fields":{"raw":{"type":"keyword"}}},"categoria":{"type":"keyword"},"precio":{"type":"double"},"stock":{"type":"integer"}}}}

Para tres productos de 12.50, 18.00 y 7.50, la suma es 38.00 y el promedio 12.666..., no 12.66 por truncamiento prematuro.

Usa registros completos: P1={nombre:"Cuaderno",categoria:"papeleria",precio:12.50,stock:3}; P2={nombre:"Mochila",categoria:"viaje",precio:18.00,stock:1}; P3={nombre:"Lápiz",categoria:"papeleria",precio:7.50,stock:2}. La búsqueda Cuaderno debe recuperar P1; las sumas por categoría son20 y18, independientemente del orden. Redondea la media12,666666 a12,67 solo al presentar.

Pruébalo

  1. Crea el mapping con nombre.raw.

  2. Indexa esos tres productos con categorías explícitas.

  3. Ejecuta una búsqueda de texto sobre nombre.

  4. Ordena por precio y agrega por categoria.

Comprueba tu resultado

Error frecuente: declarar precio como text porque llega desde un CSV. Corrige tipando el campo antes de cargar. El ejercicio debe devolver el producto de 7.50 primero al ordenar ascendentemente y una suma global de 38.00.

Flujo de datos: dos formatos de la misma fecha se normalizan y un vacío queda marcado antes de comprobar tipos, duplicados y unidades.
CursaloMapa de práctica
Antes del gráfico, revisa los datos

Antes de analizar, comprueba los tipos, valores vacíos, duplicados y unidades. Decide cómo tratar cada problema según el contexto y conserva la trazabilidad del cambio. Un gráfico solo es útil si los datos de entrada son coherentes.

Ver la infografía en tamaño completo ↗

Tipo de lección: Video

Concepto clave

Diseñar un índice optimizado en Elasticsearch para un dataset de productos es como construir una biblioteca especializada. En lugar de organizar libros por título o autor, creas un sistema donde cada producto tiene múltiples puntos de acceso: nombre, categoría, precio, especificaciones técnicas y reseñas. El mapeo avanzado define cómo se almacenan y analizan estos datos, determinando la velocidad y precisión de las búsquedas.

La optimización va más allá de la configuración básica. Implica decisiones estratégicas sobre tipos de campos, analizadores personalizados y estrategias de particionamiento. Por ejemplo, un campo de texto para nombres de productos puede necesitar un analizador que maneje sinónimos y errores ortográficos, mientras que un campo numérico para precios debe soportar agregaciones rápidas. La clave es anticipar los patrones de consulta y modelar el índice para satisfacerlos eficientemente.

Cómo funciona en la práctica

Vamos a crear un índice para productos electrónicos. Primero, definimos el mapeo con campos específicos:

PUT /productos_electronicos
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1,
    "analysis": {
      "analyzer": {
        "custom_spanish": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["lowercase", "spanish_stop", "spanish_stemmer"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "nombre": {
        "type": "text",
        "analyzer": "custom_spanish",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      },
      "precio": {
        "type": "scaled_float",
        "scaling_factor": 100
      },
      "categoria": {
        "type": "keyword"
      },
      "especificaciones": {
        "type": "nested",
        "properties": {
          "clave": {
            "type": "keyword"
          },
          "valor": {
            "type": "text",
            "analyzer": "custom_spanish"
          }
        }
      }
    }
  }
}

Este mapeo usa un analizador personalizado para español en campos de texto, tipos optimizados como scaled_float para precios, y una estructura nested para especificaciones técnicas que permite búsquedas complejas sin pérdida de precisión.

Caso de estudio

Una tienda online de electrónicos con 500,000 productos necesita mejorar su búsqueda. El índice original tenía problemas: búsquedas lentas en nombres de productos y agregaciones imprecisas en precios. Implementamos un nuevo índice con las siguientes optimizaciones:

ProblemaSoluciónResultado
Búsqueda lenta en "nombre"Analizador personalizado con stemmer españolReducción de 200ms a 50ms por consulta
Agregaciones inexactas en "precio"Campo scaled_float con factor 100Precisión del 99.9% en cálculos
Filtros complejos en especificacionesEstructura nested para atributos técnicosConsultas 3x más rápidas
El diseño del índice redujo el tiempo promedio de búsqueda de 300ms a 80ms, mejorando la experiencia del usuario y aumentando las conversiones en un 15%.

Errores comunes

  • Usar "text" para todos los campos: Campos como categorías o IDs deben ser "keyword" para filtros exactos y agregaciones rápidas.
  • Ignorar el análisis de idioma: No configurar analizadores para el idioma de los datos (ej. español) reduce la relevancia de búsquedas full-text.
  • Sobredimensionar shards: Crear demasiados shards (ej. 10 para 100,000 documentos) aumenta la sobrecarga de gestión sin beneficio.
  • No usar tipos numéricos optimizados: Emplear "float" en lugar de "scaled_float" para precios puede causar problemas de precisión en agregaciones.
  • Olvidar replicas en producción: Configurar 0 replicas compromete la disponibilidad durante fallos de nodos.

Checklist de dominio

  1. ¿Definiste analizadores personalizados para el idioma de tus datos?
  2. ¿Usaste tipos de campo específicos (keyword, scaled_float, nested) según el uso?
  3. ¿Configuraste un número adecuado de shards y replicas para tu volumen de datos?
  4. ¿Incluiste campos multifield (ej. texto + keyword) para búsquedas flexibles?
  5. ¿Probaste consultas reales contra el mapeo antes de cargar datos masivos?
  6. ¿Documentaste las decisiones de mapeo para el equipo?
  7. ¿Consideraste estrategias de indexación temporal (ej. índices por mes) para datos históricos?

Optimiza un índice de productos para una tienda de ropa

Implementa un índice Elasticsearch optimizado para un dataset de 100,000 productos de ropa. Sigue estos pasos:

  1. Crea un índice llamado "ropa_optimizado" con 2 shards y 1 replica.
  2. Define un mapeo con estos campos: nombre (texto con analizador español), precio (scaled_float), talla (keyword), color (keyword con subcampo text), y materiales (nested con clave y valor).
  3. Configura un analizador personalizado para español que incluya tokenizer standard, filtros lowercase, spanish_stop y spanish_stemmer.
  4. Indexa 3 documentos de ejemplo con datos realistas.
  5. Ejecuta una consulta que busque "camiseta algodon" en nombre y materiales, filtrando por talla "M" y rango de precio 10-50.
Pistas
  • Usa la API PUT para crear el índice con settings y mappings en una sola solicitud.
  • Para el campo color, define un tipo keyword pero añade un subcampo text para búsquedas full-text.
  • En la consulta, recuerda usar nested query para el campo materiales.

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.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.