🔍 Elasticsearch 8.10+ v1.0.0 ● Avanzado Apache-2.0

Elasticsearch: Motor de Búsqueda Full-Text

Configuración completa de índices, queries, agregaciones y ciclo de vida para Cultiva Docs — base de conocimiento B2B con 50.000+ artículos indexados.

Elasticsearch 8.10 curl / REST API ILM Policy Search Templates Edge NGram
Cliente
Cultiva Docs
SaaS B2B · Base de Conocimiento
50K+Artículos
3KUsuarios/mes
<100msP95
Arquitectura del Sistema de Búsqueda
🖥️
React UI
Autocomplete
HTTP
⚙️
Node.js API
Search Template
REST
🔍
Elasticsearch
kb_articles index
ILM
❄️
Cold Storage
S3 Snapshots
Auto
🗑️
Delete
+2 años
Mappings del Índice kb_articles
Campo Tipo Analizador / Detalle
titulo text kb_analyzer + autocomplete + keyword subfield
contenido text kb_analyzer, boost x1
resumen text kb_analyzer, boost x2
categoria keyword Facet + filter exact match
tags keyword[] Multi-value, facet
autor keyword Filter + agg
puntuacion float Boost signal, range filter
vistas integer Popularity signal
publicado_en date ISO-8601, date histogram agg
nivel keyword beginner / intermediate / advanced
activo boolean Filter context (cached)
Analizador Personalizado — Marketing Digital
JSON — Settings Analysis
PUT /kb_articles
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1,
    "analysis": {
      "analyzer": {
        "kb_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "asciifolding",
            "mktg_synonyms",
            "spanish_stemmer"
          ]
        },
        "autocomplete_analyzer": {
          "type": "custom",
          "tokenizer": "autocomplete_tok",
          "filter": ["lowercase"]
        }
      },
      "tokenizer": {
        "autocomplete_tok": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 15
        }
      },
      "filter": {
        "mktg_synonyms": {
          "type": "synonym",
          "synonyms": [
            "email,correo,newsletter",
            "SEO,posicionamiento,SERP",
            "ads,anuncios,publicidad",
            "conversión,conversion,CVR",
            "embudo,funnel,pipeline"
          ]
        },
        "spanish_stemmer": {
          "type": "stemmer",
          "language": "spanish"
        }
      }
    }
  }
}
Query Full-Text con Bool + Boost + Highlight
Query: búsqueda "estrategia email marketing"
multi_match con boosting, filtros en filter context y highlight de fragmentos
JSON — POST /kb_articles/_search
FULL-TEXT
{
  "query": {
    "bool": {
      "must": {
        "multi_match": {
          "query": "estrategia email marketing",
          "fields": [
            "titulo^4",
            "resumen^2",
            "contenido",
            "tags^3"
          ],
          "type": "best_fields",
          "fuzziness": "AUTO",
          "operator": "or"
        }
      },
      "filter": [
        {"term": {"activo": true}},
        {"range": {
          "publicado_en": {
            "gte": "now-2y"
          }}
        }
      ],
      "should": [
        {"range": {
          "puntuacion": {
            "gte": 4.0,
            "boost": 2.0
          }}},
        {"term": {
          "nivel": {
            "value": "intermediate",
            "boost": 1.5
          }}}
      ]
    }
  },
  "highlight": {
    "fields": {
      "titulo": {},
      "contenido": {
        "fragment_size": 180,
        "number_of_fragments": 2
      }
    }
  },
  "sort": [
    {"_score": "desc"},
    {"puntuacion": "desc"}
  ],
  "size": 15
}
Resultados simulados — 3 top hits
Búsqueda: "estrategia email marketing" · 1.247 docs · 42ms
Guía completa de Email Marketing para Agencias
…una estrategia sólida de email marketing puede multiplicar el ROI de tus campañas digitales. Aprende a segmentar listas, automatizar secuencias y medir conversiones…
★ Score: 18.74 email-marketing intermediate Actualizado: 2025-11-02 · ★ 4.8 · 12.340 vistas
Automatización de Newsletters con Mailchimp y Zapier
…crear un flujo de correo automatizado te permite nutrir leads sin intervención manual. Integramos newsletters segmentadas con el CRM usando webhooks…
★ Score: 14.22 automatización email-marketing Actualizado: 2025-09-15 · ★ 4.6 · 8.901 vistas
KPIs de Email: Métricas que Realmente Importan
…open rate, CTR y tasa de conversión (CVR) son los pilares de cualquier estrategia de marketing por correo electrónico. Benchmarks por sector y cómo mejorarlos…
★ Score: 12.91 analytics kpis Actualizado: 2025-07-28 · ★ 4.5 · 6.540 vistas
Agregaciones — Faceted Search
Resultados de aggs para la query "estrategia email marketing"
Categoría (terms agg)
Email Marketing
328
Automatización
218
Analytics & KPIs
152
CRM & Leads
104
SEO & Contenido
72
Nivel de dificultad (terms agg)
Intermedio
517
Principiante
358
Avanzado
222
Rango de Puntuación (range agg)
⭐ 4.5 – 5.0 (premium)
384
⭐ 4.0 – 4.5
571
⭐ < 4.0
157
ILM Policy — kb_articles-lifecycle
Ciclo de vida de artículos optimizado para coste y rendimiento
🔥
Hot
0 – 30 días
rollover 50GB
priority: 100
replicas: 1
♨️
Warm
30 – 90 días
shrink 1 shard
forcemerge 1 seg
priority: 50
❄️
Cold
90d – 1 año
searchable
snapshot S3
priority: 0
🗑️
Delete
+2 años
delete action
no recovery
JSON — PUT /_ilm/policy/kb_articles-lifecycle
ILM
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
          "rollover": {
            "max_age": "30d",
            "max_primary_shard_size": "50gb"
          },
          "set_priority": {"priority": 100}
        }
      },
      "warm": {
        "min_age": "30d",
        "actions": {
          "shrink": {"number_of_shards": 1},
          "forcemerge": {"max_num_segments": 1}
        }
      },
      "cold": {
        "min_age": "90d",
        "actions": {
          "searchable_snapshot": {
            "snapshot_repository": "s3-backups"
          }
        }
      },
      "delete": {
        "min_age": "730d",
        "actions": {"delete": {}}
      }
    }
  }
}
Search Template Reutilizable — kb-search
JSON — PUT /_scripts/kb-search
TEMPLATE
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": {
        "bool": {
          "must": {
            "multi_match": {
              "query": "{{query}}",
              "fields": [
                "titulo^4","resumen^2","contenido"
              ],
              "fuzziness": "AUTO"
            }
          },
          "filter": [
            {"term": {"activo": true}},
            {{#categoria}}
            {"term": {
              "categoria": "{{categoria}}"
            }},
            {{/categoria}}
            {"range": {
              "puntuacion": {
                "gte": "{{min_rating}}{{^min_rating}}0{{/min_rating}}"
              }
            }}
          ]
        }
      },
      "size": "{{size}}{{^size}}15{{/size}}"
    }
  }
}
bash — uso del template
CLIENT CALL
# Llamada con parámetros desde Node.js / curl
curl -X POST "http://es:9200/kb_articles/_search/template" \
  -H "Content-Type: application/json" \
  -d '{
  "id": "kb-search",
  "params": {
    "query":      "automatizar email leads",
    "categoria":  "Automatización",
    "min_rating": 4.0,
    "size":       10
  }
}'
KPIs de Rendimiento — Estado Actual
42ms
P50 Latencia
▼ -58ms vs SQL
89ms
P95 Latencia
✓ bajo 100ms
64%
CTR top-3
▲ +24pp
1.4%
Zero Results
▼ -6.1pp
50.2K
Docs indexados
3 shards × 1
98.9%
Uptime
SLA OK
Best Practices Aplicadas
  • keyword subfields en campos text
    titulo.keyword para ordenación exacta y facets sin reindexar
  • fuzziness AUTO en queries usuario
    Maneja typos sin penalizar performance (1 edit ≤6 chars)
  • filter context para booleanos y fechas
    No puntúan → se cachean → latencia -30%
  • Search templates server-side
    La lógica de query no viaja en cada petición del cliente
  • Slowlog activado en warn > 2s
    index.search.slowlog.threshold.query.warn: 2s