Elasticsearch-py: guía para trabajar con Elasticsearch en Python

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción

Elasticsearch es un potente sistema de búsqueda distribuido basado en Apache Lucene, diseñado para búsqueda de texto completo, registro de eventos, monitoreo y análisis de grandes volúmenes de datos. Para integrarlo con Python se utiliza el cliente oficial elasticsearch-py, que brinda acceso completo a todas las API de Elasticsearch desde código Python.

La librería elasticsearch-py permite a los desarrolladores implementar búsquedas avanzadas, agregaciones y procesamiento de grandes volúmenes de datos directamente en aplicaciones Python, incluyendo servicios web, herramientas analíticas y sistemas de monitoreo.

Descripción de la librería elasticsearch-py

Elasticsearch-py es el cliente oficial de Python para trabajar con Elasticsearch. La librería proporciona acceso de bajo nivel a todas las funciones de Elasticsearch a través de la API RESTful, ofreciendo una interfaz Python cómoda y eficiente.

Características principales de la librería:

  • Soporte oficial: Desarrollada y mantenida por el equipo de Elastic
  • Compatibilidad total: Soporta todas las versiones de Elasticsearch
  • Detección automática de nodos: Puede detectar y conectarse automáticamente a los nodos del clúster
  • Pool de conexiones: Gestión eficiente de las conexiones con el clúster
  • Manejo de errores: Sistema integrado de gestión de excepciones
  • Serialización: Conversión automática de objetos Python a JSON

Instalación y conexión al clúster

Instalación

pip install elasticsearch

Para trabajar con certificados SSL:

pip install elasticsearch[async]

Conexión a un clúster local

from elasticsearch import Elasticsearch

es = Elasticsearch("http://localhost:9200")

Conexión a un clúster remoto con autenticación

es = Elasticsearch(
    "https://your-cluster:9200",
    basic_auth=("user", "password"),
    verify_certs=True
)

Conexión usando claves API

es = Elasticsearch(
    "https://your-cluster:9200",
    api_key="your_api_key",
    verify_certs=True
)

Conexión a múltiples nodos

es = Elasticsearch(
    [
        "https://node1:9200",
        "https://node2:9200",
        "https://node3:9200"
    ],
    basic_auth=("user", "password")
)

Conceptos fundamentales de Elasticsearch

  • Índice — equivalente a una tabla en bases de datos relacionales, contiene documentos con estructura similar
  • Documento — objeto JSON almacenado en un índice, equivalente a un registro en una tabla
  • Campo — atributo de un documento, equivalente a una columna en una tabla
  • Mapeo (mapping) — descripción de la estructura del documento y los tipos de campos
  • Shard — unidad física de almacenamiento de datos del índice
  • Réplica — copia de un shard para garantizar tolerancia a fallos

Gestión de índices

Creación de índices y esquemas

mapping = {
    "mappings": {
        "properties": {
            "title": {"type": "text", "analyzer": "spanish"},
            "tags": {"type": "keyword"},
            "published": {"type": "date"},
            "content": {"type": "text"},
            "author": {"type": "keyword"},
            "views": {"type": "integer"}
        }
    },
    "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 0
    }
}

es.indices.create(index="articles", body=mapping)

Eliminación de un índice

es.indices.delete(index="articles")

Recommendations