En este tema, aprenderemos cómo indexar datos en Elasticsearch. La indexación es el proceso de almacenar documentos en un índice para que puedan ser buscados y recuperados de manera eficiente. Vamos a cubrir los conceptos básicos, los métodos de indexación y algunos ejemplos prácticos.

Conceptos Clave

Antes de comenzar con la indexación de datos, es importante entender algunos conceptos clave:

  • Documento: La unidad básica de información que puede ser indexada. Es similar a una fila en una base de datos relacional.
  • Índice: Un contenedor que almacena documentos. Es similar a una tabla en una base de datos relacional.
  • Tipo: Una categoría lógica dentro de un índice. En versiones recientes de Elasticsearch, el uso de tipos ha sido deprecado.
  • ID: Un identificador único para cada documento dentro de un índice.

Métodos de Indexación

Hay varias formas de indexar datos en Elasticsearch:

  1. Indexación Individual: Indexar un solo documento a la vez.
  2. Indexación en Lote: Indexar múltiples documentos en una sola solicitud.

Indexación Individual

Para indexar un solo documento, utilizamos el método HTTP PUT o POST en la API de Elasticsearch. Aquí hay un ejemplo básico:

PUT /mi_indice/_doc/1
{
  "nombre": "Juan Pérez",
  "edad": 30,
  "ocupación": "Ingeniero"
}

En este ejemplo:

  • mi_indice es el nombre del índice.
  • _doc es el tipo de documento (en versiones recientes, se usa _doc por defecto).
  • 1 es el ID del documento.
  • El cuerpo de la solicitud contiene el documento en formato JSON.

Indexación en Lote

Para indexar múltiples documentos en una sola solicitud, utilizamos la API _bulk. Aquí hay un ejemplo:

POST /_bulk
{ "index": { "_index": "mi_indice", "_id": "1" } }
{ "nombre": "Juan Pérez", "edad": 30, "ocupación": "Ingeniero" }
{ "index": { "_index": "mi_indice", "_id": "2" } }
{ "nombre": "Ana Gómez", "edad": 25, "ocupación": "Diseñadora" }

En este ejemplo:

  • Cada línea de metadatos ({ "index": { ... } }) es seguida por una línea de datos del documento.
  • _bulk permite realizar múltiples operaciones (indexar, actualizar, eliminar) en una sola solicitud.

Ejemplo Práctico

Vamos a indexar algunos documentos en un índice llamado empleados.

Paso 1: Crear el Índice

Primero, creamos el índice empleados:

PUT /empleados
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "nombre": { "type": "text" },
      "edad": { "type": "integer" },
      "ocupación": { "type": "text" }
    }
  }
}

Paso 2: Indexar Documentos Individualmente

Indexamos algunos documentos individualmente:

PUT /empleados/_doc/1
{
  "nombre": "Juan Pérez",
  "edad": 30,
  "ocupación": "Ingeniero"
}

PUT /empleados/_doc/2
{
  "nombre": "Ana Gómez",
  "edad": 25,
  "ocupación": "Diseñadora"
}

Paso 3: Indexar Documentos en Lote

Indexamos múltiples documentos en una sola solicitud:

POST /_bulk
{ "index": { "_index": "empleados", "_id": "3" } }
{ "nombre": "Carlos López", "edad": 28, "ocupación": "Desarrollador" }
{ "index": { "_index": "empleados", "_id": "4" } }
{ "nombre": "María Fernández", "edad": 32, "ocupación": "Gerente" }

Ejercicio Práctico

Ejercicio 1: Crear e Indexar Documentos

  1. Crea un índice llamado productos con los siguientes campos: nombre (texto), precio (flotante) y categoría (texto).
  2. Indexa los siguientes documentos en el índice productos:
    • {"nombre": "Laptop", "precio": 999.99, "categoría": "Electrónica"}
    • {"nombre": "Silla", "precio": 49.99, "categoría": "Muebles"}
    • {"nombre": "Café", "precio": 5.99, "categoría": "Alimentos"}

Solución:

  1. Crear el índice productos:
PUT /productos
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "nombre": { "type": "text" },
      "precio": { "type": "float" },
      "categoría": { "type": "text" }
    }
  }
}
  1. Indexar los documentos:
PUT /productos/_doc/1
{
  "nombre": "Laptop",
  "precio": 999.99,
  "categoría": "Electrónica"
}

PUT /productos/_doc/2
{
  "nombre": "Silla",
  "precio": 49.99,
  "categoría": "Muebles"
}

PUT /productos/_doc/3
{
  "nombre": "Café",
  "precio": 5.99,
  "categoría": "Alimentos"
}

Conclusión

En esta sección, hemos aprendido cómo indexar datos en Elasticsearch utilizando métodos individuales y en lote. Hemos cubierto los conceptos básicos y proporcionado ejemplos prácticos para ayudarte a comenzar. En la próxima sección, exploraremos cómo buscar datos en Elasticsearch.

© Copyright 2024. Todos los derechos reservados