🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

PrestaShop y Elasticsearch: Búsqueda Avanzada y Facetas

Actualizado el 9 de junio de 2026

Introducción: El problema de la búsqueda en PrestaShop por defecto

En el comercio electrónico moderno, la velocidad y precisión de la búsqueda determinan la tasa de conversión. PrestaShop, por defecto, utiliza un motor de búsqueda basado en MySQL con índices simples. Aunque funcional para catálogos pequeños (menos de 500 productos), este enfoque presenta limitaciones críticas cuando escalas:

  • Rendimiento degradado: Las consultas LIKE y JOIN pesados ​​en tablas de gran volumen.
  • Búsqueda difusa limitada: No maneja errores tipográficos ni sinónimos.
  • Facetas pobres: Los filtros de atributos (talla, color, precio) se vuelven lentos.
  • Sin relevancia avanzada: No prioriza productos según popularidad o ventas.

Ahí entra Elasticsearch PrestaShop: una solución de búsqueda distribuida, basada en Lucene, que transforma la experiencia de navegación en tu tienda. Este artículo cubre desde la instalación técnica hasta la optimización de facetas, con configuraciones reales para entornos de producción.

¿Por qué Elasticsearch para búsqueda avanzada en e-commerce?

Diferencias clave con el motor nativo de PrestaShop

CaracterísticaMySQL (nativo)Elasticsearch
Velocidad en 10k+ productos2-5 segundos<200 ms
Búsqueda difusaNoSí (Levenshtein)
Facetas dinámicasLento con muchos atributosAgregaciones instantáneas
SinónimosNo nativoAnálisis de tokens
EscalabilidadVerticalHorizontal (clúster)

Elasticsearch no solo acelera la búsqueda, sino que permite filtros e-commerce complejos sin impacto en el servidor web. Cada consulta se resuelve en el índice invertido, evitando consultas SQL pesadas.

[INFO] Elasticsearch no reemplaza a MySQL en PrestaShop, sino que actúa como capa de búsqueda. Los datos de pedidos y clientes siguen en la base de datos relacional.

Instalación de Elasticsearch en PrestaShop: Guía paso a paso

Requisitos técnicos previos

  • PrestaShop 1.7.x o 8.x (versiones recientes con soporte para módulos externos)
  • Servidor dedicado o VPS con al menos 2GB RAM (4GB recomendado para catálogos >50k productos)
  • Java 8+ (Elasticsearch corre sobre JVM)
  • Módulo compatible: Recomendamos PrestaShop Elasticsearch de PrestaShop Addons o soluciones open-source como Elasticsearch PrestaShop Pro.

Instalación del motor Elasticsearch

# Descargar e instalar Elasticsearch 7.x (compatible con la mayoría de módulos)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.9-linux-x86_64.tar.gz
tar -xzf elasticsearch-7.17.9-linux-x86_64.tar.gz
cd elasticsearch-7.17.9/

# Configurar para producción (ajustar según RAM disponible)
echo "discovery.type: single-node" >> config/elasticsearch.yml
echo "xpack.security.enabled: false" >> config/elasticsearch.yml

# Iniciar servicio
./bin/elasticsearch -d -p pid

Verifica que el servicio responde:

curl http://localhost:9200
# Deberías ver algo como: {"name" : "node-1", "cluster_name" : "elasticsearch", ...}

Configuración del módulo en PrestaShop

  1. Instala el módulo desde el backoffice (Módulos → Catálogo de módulos → Buscar "Elasticsearch").
  2. Ve a Módulos → Módulos instalados y haz clic en "Configurar".
  3. Introduce la URL del servidor Elasticsearch (por defecto http://localhost:9200).
  4. Configura el índice principal: prestashop_products_es (cambia es por tu idioma).
  5. Haz clic en "Reindexar todos los productos" (esto puede tomar varios minutos en catálogos grandes).

[WARNING] Durante la reindexación, evita modificar productos en PrestaShop. El proceso consume CPU y puede causar inconsistencias si hay escrituras simultáneas.

Búsqueda avanzada: Configurando análisis de texto y relevancia

Definición de analizadores personalizados

Para una búsqueda avanzada efectiva, necesitas un analizador que maneje:

  • Stemming en español: Reducir palabras a su raíz ("corriendo" → "correr").
  • Sinónimos: "zapatillas" y "tenis" deben encontrar los mismos resultados.
  • Filtro de stopwords: Palabras vacías como "el", "la", "de".

Ejemplo de configuración en config/elasticsearch.yml o mediante API:

PUT /prestashop_products_es
{
  "settings": {
    "analysis": {
      "filter": {
        "spanish_stop": { "type": "stop", "stopwords": "_spanish_" },
        "spanish_stemmer": { "type": "stemmer", "language": "light_spanish" },
        "synonym_filter": { 
          "type": "synonym", 
          "synonyms": [
            "zapatillas, tenis, sneakers",
            "camisetas, remeras, playeras"
          ]
        }
      },
      "analyzer": {
        "custom_spanish": {
          "tokenizer": "standard",
          "filter": ["lowercase", "spanish_stop", "synonym_filter", "spanish_stemmer"]
        }
      }
    }
  }
}

Ajuste de relevancia (boosting)

Elasticsearch permite priorizar campos según su importancia. Por ejemplo:

  • Nombre del producto: peso 5
  • Descripción corta: peso 3
  • Descripción larga: peso 1
  • Tags y características: peso 2

Esto se configura en el mapeo del índice:

"mappings": {
  "properties": {
    "name": { "type": "text", "boost": 5, "analyzer": "custom_spanish" },
    "description_short": { "type": "text", "boost": 3, "analyzer": "custom_spanish" },
    "description": { "type": "text", "boost": 1, "analyzer": "custom_spanish" }
  }
}

[TIP] Usa la herramienta _analyze de Elasticsearch para probar cómo se tokenizan tus consultas antes de implementarlas en producción. Ejemplo: GET /prestashop_products_es/_analyze { "text": "zapatillas deportivas", "analyzer": "custom_spanish" }.

Facetas y filtros e-commerce: Implementación avanzada

¿Qué son las facetas en Elasticsearch?

Las facetas (agregaciones en Elasticsearch) son recuentos de documentos que cumplen ciertos criterios. Para un e-commerce, esto se traduce en:

  • Rango de precios: Número de productos entre 10€-50€, 50€-100€, etc.
  • Atributos: Cuántos productos tienen talla "M", color "rojo".
  • Categorías: Productos en "Hombre", "Mujer", "Niño".

Configuración de facetas dinámicas

En el módulo de PrestaShop, normalmente hay una sección "Facetas" donde defines qué campos indexar como agregaciones. Ejemplo de mapeo con campos específicos para facetas:

"properties": {
  "price": { "type": "float" },
  "attributes": {
    "type": "nested",
    "properties": {
      "name": { "type": "keyword" },
      "value": { "type": "keyword" }
    }
  },
  "categories": { "type": "keyword" }
}

Luego, en la consulta de búsqueda, añades agregaciones:

{
  "aggs": {
    "price_ranges": {
      "range": {
        "field": "price",
        "ranges": [
          { "to": 50 },
          { "from": 50, "to": 100 },
          { "from": 100, "to": 200 },
          { "from": 200 }
        ]
      }
    },
    "colors": {
      "nested": { "path": "attributes" },
      "filter": { "term": { "attributes.name": "color" } },
      "aggs": {
        "color_values": { "terms": { "field": "attributes.value" } }
      }
    }
  }
}

Filtros combinados y rendimiento

Los filtros e-commerce en Elasticsearch son extremadamente rápidos porque usan estructuras de bitsets (cache de filtros). Puedes combinar:

  • Filtros booleanos: must (AND), should (OR), must_not (NOT).
  • Filtros de rango: range para precio, fecha, peso.
  • Filtros de términos: term para atributos exactos (talla, color).

Ejemplo de consulta completa:

{
  "query": {
    "bool": {
      "must": [
        { "match": { "name": "camiseta algodón" } },
        { "range": { "price": { "gte": 10, "lte": 50 } } }
      ],
      "filter": [
        { "term": { "categories": "hombre" } },
        { "nested": { 
          "path": "attributes",
          "query": { "term": { "attributes.value": "M" } }
        }}
      ]
    }
  },
  "aggs": { ... }
}

[WARNING] Los campos anidados (nested) son más lentos que los campos planos. Si tienes muchos atributos (ej: más de 20), considera usar flattened o un índice separado para atributos.

Optimización del rendimiento de búsqueda

Escalado horizontal y sharding

Para catálogos muy grandes (>100k productos), configura un clúster con múltiples nodos:

# En cada nodo, modificar elasticsearch.yml
node.name: node-1
discovery.seed_hosts: ["node1:9300", "node2:9300"]
cluster.initial_master_nodes: ["node1", "node2"]

Define el número de shards y réplicas en el índice:

PUT /prestashop_products_es
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

Caché de consultas y filtros

Elasticsearch cachea automáticamente los filtros más usados. Optimiza:

  • Filtros de términos: Usa keyword en lugar de text para campos de facetas.
  • Agregaciones: Limita el tamaño de las agregaciones (size: 10 para los 10 colores más comunes).
  • Índices de tiempo: Si tienes productos con fechas de publicación, usa índices basados en tiempo (ej: prestashop_products_2024-01).

Monitoreo con Kibana

Integra Elasticsearch con Kibana para visualizar:

  • Tiempos de respuesta de búsqueda (p95, p99).
  • Consultas lentas (slow logs).
  • Tasa de aciertos de caché.
# Activar slow logs en elasticsearch.yml
index.search.slowlog.threshold.query.warn: 1s
index.search.slowlog.threshold.fetch.warn: 500ms

Casos de uso reales y troubleshooting

Problema común: La búsqueda no encuentra productos con tildes

Solución: Asegúrate de que el analizador use lowercase y asciifolding. Ejemplo:

"filter": ["lowercase", "asciifolding", "spanish_stemmer"]

Problema: Las facetas no se actualizan al cambiar de categoría

Solución: Verifica que el módulo de PrestaShop esté configurado para usar filtros contextuales. En la configuración del módulo, activa la opción "Facetas por categoría" y reindexa.

Problema: Elasticsearch consume demasiada RAM

Solución: Limita la memoria heap de JVM:

# En /etc/elasticsearch/jvm.options
-Xms2g
-Xmx2g

Nunca uses más del 50% de la RAM total del servidor para Elasticsearch, y deja al menos 2GB para el sistema operativo.

Conclusión: ¿Vale la pena Elasticsearch en PrestaShop?

Para tiendas con más de 5,000 productos o con catálogos que requieren búsqueda avanzada y facetas complejas, Elasticsearch no es un lujo, es una necesidad. La inversión inicial (servidor, configuración, módulo) se recupera rápidamente en:

  • Aumento de conversión: Los usuarios encuentran lo que buscan en <1 segundo.
  • Reducción de carga en el servidor: Las consultas pesadas de MySQL desaparecen.
  • Escalabilidad: Puedes crecer a 500k productos sin cambiar de infraestructura.

El único "pero" es la complejidad técnica inicial. Si no tienes experiencia con Elasticsearch, considera contratar a un SysAdmin especializado o usar un servicio gestionado como Elastic Cloud.

[TIP] Empieza con una configuración básica (single-node, 2GB RAM) y monitorea. Si el rendimiento es bueno, escala. No sobreingenierices desde el inicio.

¿Listo para implementar Elasticsearch PrestaShop en tu tienda? El camino hacia una búsqueda avanzada y filtros e-commerce ultrarrápidos comienza con una buena indexación.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel