No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Mapeo de datos

6/16
Recursos

¿Por qué es esencial definir el mapeo de datos en Elasticsearch?

El mapeo de datos en Elasticsearch es una práctica fundamental para optimizar el rendimiento y precisión de las búsquedas. Como encargado de tus datos, eres quien mejor los conoce, y por ello es vital que especifiques un mapeo explícito al crear un índice.

Por ejemplo, en Elasticsearch puedes almacenar texto en dos tipos de datos: text y keyword. La diferencia principal radica en el operador de búsqueda que utilizan: text usa el operador match para búsquedas de texto completo, como las de Google, mientras que keyword usa term para buscar valores exactos. Imagínate que tienes un modelo llamado "platos" con un campo estado. Si el campo es de tipo keyword y buscas "active", no retornará "activo" porque busca un valor exacto. En cambio, si es de tipo text, te ofrecerá coincidencias aproximadas como "activo" e "inactivo".

Además, Elasticsearch admite diversos tipos de datos estándares, incluyendo texto, fechas, números (enteros y flotantes), objetos y objetos geográficos. Definir estos tipos con precisión es crucial para que los datos se gestionen de forma eficiente.

¿Cómo crear un mapeo de datos en Elasticsearch con Postman?

Crear un mapeo en Elasticsearch utilizando Postman requiere seguir ciertos pasos organizados. A continuación te muestro cómo hacerlo:

  1. Inicia una nueva consulta con el verbo PUT. Esta consulta se dirigirá a localhost:9200/platos para crear un modelo llamado "platos".
  2. En el cuerpo de la consulta, utiliza JSON para definir el mapeo:
    • Comienza con la palabra mappings.
    • Incluye properties, donde se especifican las propiedades del índice.
    • Por ejemplo:
      {
        "mappings": {
          "properties": {
            "nombre": { "type": "text" },
            "descripcion": { "type": "text" },
            "pedidos_ultima_hora": { "type": "integer" },
            "ultima_modificacion": {
              "type": "object",
              "properties": {
                "usuario": { "type": "text" },
                "fecha": { "type": "date" }
              }
            }
          }
        }
      }
      
  3. Envía la consulta. Al hacerlo, crearás exitosamente el índice de "platos" con el mapeo especificado.

Es importante señalar que si olvidas incluir una propiedad, no necesitas eliminar y recrear el índice. Simplemente puedes modificar el mapeo existente utilizando una nueva consulta PUT apuntando a localhost:9200/platos/_mapping, añadiendo los campos que faltan como el campo estado de tipo keyword para buscar valores exactos.

¿Cómo probar el mapeo con creación de documentos?

Probar tu mapeo es crucial para asegurarte de que se ha configurado correctamente. Sigamos estos pasos para crear documentos en el índice y verificar el mapeo:

  1. Crea un documento en platos/1:

    • Utiliza una nueva consulta con PUT y apunta a localhost:9200/platos/_doc/1.
    • En el cuerpo JSON, añade los detalles del primer plato, por ejemplo:
      {
        "nombre": "Bow picante",
        "descripcion": "Pollo, salsa picante, frijoles, plátano y aguacate",
        "estado": "activo",
        "pedidos_ultima_hora": 42,
        "ultima_modificacion": {
          "usuario": "[email protected]",
          "fecha": "2020-02-19"
        }
      }
      
    • Envía la consulta para crear el documento.
  2. Crea un segundo documento en platos/2:

    • Similar al paso anterior, dirige la consulta a localhost:9200/platos/_doc/2.
    • El cuerpo JSON puede lucir así:
      {
        "nombre": "Ensaladísima",
        "descripcion": "Aceitunas, cebolla, queso, tomate, aguacate (Saludable)",
        "estado": "activo",
        "pedidos_ultima_hora": 0,
        "ultima_modificacion": {
          "usuario": "[email protected]",
          "fecha": "2020-01-22"
        }
      }
      
    • Envía la consulta, y verifica que el documento ha sido creado exitosamente.

Con estos métodos, puedes verificar que el índice de "platos" está funcionando correctamente según los datos del mapeo. Recuerda siempre que un mapeo bien definido optimiza las búsquedas y manejo de datos en Elasticsearch, permitiendo una eficiencia y precisión que se traduce en mejores resultados para tus consultas. ¡Sigue explorando y perfeccionando tus habilidades con Elasticsearch para maximizar su potencial!

Aportes 10

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Formato json para insertar platos:

{
    "nombre": "",
    "descripcion": "",
    "estado": "",
    "pedidosUltimaHora": ,
    "ultimaModificacion": {
        "usuario": "",
        "fecha": ""
    }
}

Json file de la clase:

{
    "mappings": {
        "properties": {
            "nombre": {"type": "text"},
            "descripción": {"type": "text"},
            "pedidosUltimaHora": {"type": "integer"},
            "ultimaModificacion": {
                "properties": {
                    "usuario": {"type": "text"},
                    "fecha": {"type": "date"}
                }
            }
        }   
    }
}

RENOMBRAR EL NOMBRE DE UN CAMPO.

ElasticSearch no permite cambiar el nombre de un campo ya creado. En caso de querer hacer este cambio debemos reindexar. Supongamos que tienes este documento:

{
  "nombre": "xxxx",
  "apelido": "yyyy"
}

Y quieres arreglar el campo apelido, el cual está mal escrito y ya tienes muchos documentos indexados. Entonces haces lo siguiente:

POST _reindex
{
  "source": {
    "index": "indice_actual"
  },
  "dest": {
    "index": "nuevo_indice"
  },
  "script": {
    "source": "ctx._source.apellido = ctx._source.remove(\"apelido\")"
  }
}

Y listo, ahora nuevo_indice contiene el campo sin la falta ortográfica y con los datos que tenías guardados en indice_actual.

Que mal curso, estoy haciéndolo pero hasta ahorita no veo cual es el objetivo final, sin añadir que sigo sin entender Elasticsearch, esto no es para nada lo que esperaba del curso

  • Para obtener un optimo rendimiento en Elastic Search, se recomienda crear un mapeo explicito.
  • El texto puede ser guardado por dos tipo de datos text y keyword en el 1° las búsquedas se realizan con el operador (match), que busca valores de texto completo, y en el 2° con el operador (term), que busca valores exactos.
  • Texto: text, keyword
  • Fecha: date
  • Númerico: integer, long, float, double
  • Boleano: boolean
  • Objetos: object, nested
  • Geográficos, geo_point, geo_shape

DIFERENCIA ENTRE TEXT Y KEYWORD 🤔
.
Los campos de texto (text fields) se dividen en sus términos individuales en la indexación para permitir una coincidencia parcial, mientras que los campos de palabras clave (keyword fields) se indexan tal cual.
.
Por ejemplo, si usamos el campo text para almacenar “Hola mundo” el inicializador de Elasticsearch lo almacenara como [Hola, mundo].
.
Por otra parte si utilizamos el tipo keyword, se almacenara la frase entera sin ser separada.
.
El tipo de dato text es perfecto para descripciones de productos y keyword es para buscar valores exactos como nombres de provincias, estados, universidades, etc.

Con la instalación de ElasticSearch en windows hay que tener mucha calma para hacerlo funcionar y aquí les dejo los codigo de json:

deje el curso por unos dias, y regrese y tengo la misma sensacion de que estoy tomando apunte, pero nose porque hjajajaja xD No me ha gustado nada este curso.
Igual lo voy a terminar, pero ni en pedo lo recomendare

Actualizar mapping platos - con campo estado

Creacion del mapeo platos