🔍 Elasticsearch Cheatsheet Completo 🔍

Elasticsearch es un motor de búsqueda y análisis distribuido en tiempo real, construido sobre Apache Lucene. Es un almacén de datos NoSQL orientado a documentos, ideal para casos de uso que requieren búsquedas rápidas, escalabilidad horizontal y capacidades analíticas avanzadas.


1. 🌟 Conceptos Clave


2. 🛠️ Arquitectura Básica


3. ⚙️ Instalación y Configuración Básica

3.1. Con Docker (Recomendado para Desarrollo)

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \
    -e "discovery.type=single-node" \
    -e "xpack.security.enabled=false" \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    elasticsearch:8.12.0 # Usar la versión específica que necesites
# Para habilitar X-Pack Basic Security (autenticación):
# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \
#   -e "discovery.type=single-node" \
#   -e "xpack.security.enabled=true" \
#   -e "ELASTIC_PASSWORD=changeme" \
#   elasticsearch:8.12.0

3.2. Configuración (config/elasticsearch.yml)


4. 🗄️ Operaciones CRUD de Documentos (API REST)

Todas las interacciones con Elasticsearch se realizan a través de una API RESTful (generalmente JSON sobre HTTP). Puedes usar curl, Postman, Kibana Dev Tools o clientes de lenguaje.

4.1. Indexar un Documento (CREATE / UPDATE)

4.2. Obtener un Documento

GET /my_index/_doc/1

4.3. Actualizar un Documento (Parcialmente)

4.4. Eliminar un Documento

DELETE /my_index/_doc/1

4.5. Operaciones Bulk (Masivas)


5. 🔎 Búsqueda (Search API - Query DSL)

El corazón de Elasticsearch.

5.1. Tipos de Queries Comunes


6. 📊 Agregaciones (Aggregations API)

Para realizar análisis de datos complejos.

GET /my_index/_search
{
  "size": 0, # No queremos hits, solo agregaciones
  "aggs": {
    "products_by_author": { # Nombre de la agregación
      "terms": {
        "field": "author.keyword", # Agrupar por autor (usar .keyword para exactitud)
        "size": 10
      },
      "aggs": { # Sub-agregaciones (ej. promedio de vistas por autor)
        "avg_views": {
          "avg": {
            "field": "views"
          }
        }
      }
    },
    "monthly_published": {
      "date_histogram": {
        "field": "published_date",
        "calendar_interval": "month"
      }
    },
    "total_documents": {
      "value_count": {
        "field": "_id"
      }
    },
    "price_stats": {
      "stats": { # Estadísticas básicas (min, max, avg, sum, count)
        "field": "price"
      }
    }
  }
}

7. 📝 Mappings (Esquema de Índice)

Define el tipo de datos de los campos de un documento y cómo deben ser indexados.

PUT /my_articles
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "author": { "type": "keyword" }, # Para búsqueda exacta y agregaciones
      "content": { "type": "text", "analyzer": "spanish" }, # Usar analizador de español
      "tags": { "type": "keyword" },
      "published_date": { "type": "date", "format": "yyyy-MM-dd" },
      "views": { "type": "long" },
      "location": { "type": "geo_point" }, # Para datos geoespaciales
      "comments": {
        "type": "nested", # Para arrays de objetos, permite consultar objetos individuales
        "properties": {
          "user": { "type": "keyword" },
          "text": { "type": "text" }
        }
      }
    }
  },
  "settings": {
    "number_of_shards": 3, # Shards primarios
    "number_of_replicas": 1 # Réplicas
  }
}

8. 🧰 Gestión de Índices


9. 🌐 Clientes de Lenguaje

Elasticsearch proporciona clientes oficiales para varios lenguajes:


10. 💡 Buenas Prácticas y Consejos


Este cheatsheet te proporciona una referencia completa de Elasticsearch, cubriendo sus conceptos esenciales, arquitectura, cómo interactuar con él usando la API REST, la búsqueda con Query DSL, las agregaciones, los mappings y las mejores prácticas para construir sistemas de búsqueda y análisis potentes.