En este tema, aprenderemos cómo realizar búsquedas en Elasticsearch. Este es uno de los aspectos más poderosos y útiles de Elasticsearch, ya que permite realizar consultas rápidas y eficientes sobre grandes volúmenes de datos.

  1. Introducción a la Búsqueda en Elasticsearch

Elasticsearch utiliza un lenguaje de consulta llamado Query DSL (Domain Specific Language) que permite construir consultas complejas de manera sencilla. Las búsquedas en Elasticsearch se realizan mediante solicitudes HTTP a la API RESTful.

Conceptos Clave

  • Índice: Un contenedor de documentos que comparten características similares.
  • Documento: La unidad básica de información que se puede indexar.
  • Tipo: Una categoría de documentos dentro de un índice (obsoleto en versiones recientes de Elasticsearch).

  1. Realizando una Búsqueda Básica

Para realizar una búsqueda básica, utilizamos el método HTTP GET en la ruta /_search. A continuación, se muestra un ejemplo de una búsqueda simple que devuelve todos los documentos en un índice.

Ejemplo de Búsqueda Básica

GET /mi_indice/_search
{
  "query": {
    "match_all": {}
  }
}

Explicación del Código

  • GET /mi_indice/_search: Realiza una búsqueda en el índice llamado mi_indice.
  • "query": { "match_all": {} }: Utiliza la consulta match_all que devuelve todos los documentos en el índice.

  1. Búsqueda por Campos Específicos

Podemos buscar documentos que coincidan con un valor específico en un campo determinado utilizando la consulta match.

Ejemplo de Búsqueda por Campo

GET /mi_indice/_search
{
  "query": {
    "match": {
      "campo": "valor"
    }
  }
}

Explicación del Código

  • "match": { "campo": "valor" }: Busca documentos donde el campo campo coincida con el valor valor.

  1. Búsqueda con Múltiples Condiciones

Para realizar búsquedas con múltiples condiciones, podemos utilizar la consulta bool que permite combinar varias consultas.

Ejemplo de Búsqueda con Múltiples Condiciones

GET /mi_indice/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "campo1": "valor1" } },
        { "match": { "campo2": "valor2" } }
      ]
    }
  }
}

Explicación del Código

  • "bool": { "must": [...] }: La consulta bool con la cláusula must requiere que todas las condiciones dentro de la lista se cumplan.
  • { "match": { "campo1": "valor1" } }: Primera condición que debe cumplirse.
  • { "match": { "campo2": "valor2" } }: Segunda condición que debe cumplirse.

  1. Búsqueda con Filtros

Los filtros se utilizan para restringir los resultados de búsqueda sin afectar la puntuación de relevancia. Los filtros son más eficientes que las consultas porque no necesitan calcular la puntuación.

Ejemplo de Búsqueda con Filtros

GET /mi_indice/_search
{
  "query": {
    "bool": {
      "must": {
        "match": { "campo": "valor" }
      },
      "filter": {
        "term": { "campo_filtro": "valor_filtro" }
      }
    }
  }
}

Explicación del Código

  • "filter": { "term": { "campo_filtro": "valor_filtro" } }: Aplica un filtro que requiere que el campo campo_filtro tenga el valor valor_filtro.

  1. Ejercicios Prácticos

Ejercicio 1: Búsqueda Básica

Realiza una búsqueda que devuelva todos los documentos en el índice productos.

GET /productos/_search
{
  "query": {
    "match_all": {}
  }
}

Ejercicio 2: Búsqueda por Campo

Busca documentos en el índice productos donde el campo nombre sea igual a "laptop".

GET /productos/_search
{
  "query": {
    "match": {
      "nombre": "laptop"
    }
  }
}

Ejercicio 3: Búsqueda con Múltiples Condiciones

Busca documentos en el índice productos donde el campo nombre sea igual a "laptop" y el campo marca sea igual a "Dell".

GET /productos/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "nombre": "laptop" } },
        { "match": { "marca": "Dell" } }
      ]
    }
  }
}

Ejercicio 4: Búsqueda con Filtros

Busca documentos en el índice productos donde el campo nombre sea igual a "laptop" y el campo precio sea igual a 1000.

GET /productos/_search
{
  "query": {
    "bool": {
      "must": {
        "match": { "nombre": "laptop" }
      },
      "filter": {
        "term": { "precio": 1000 }
      }
    }
  }
}

Soluciones a los Ejercicios

Solución Ejercicio 1

GET /productos/_search
{
  "query": {
    "match_all": {}
  }
}

Solución Ejercicio 2

GET /productos/_search
{
  "query": {
    "match": {
      "nombre": "laptop"
    }
  }
}

Solución Ejercicio 3

GET /productos/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "nombre": "laptop" } },
        { "match": { "marca": "Dell" } }
      ]
    }
  }
}

Solución Ejercicio 4

GET /productos/_search
{
  "query": {
    "bool": {
      "must": {
        "match": { "nombre": "laptop" }
      },
      "filter": {
        "term": { "precio": 1000 }
      }
    }
  }
}

Conclusión

En esta sección, hemos aprendido cómo realizar búsquedas en Elasticsearch utilizando consultas básicas, búsquedas por campos específicos, búsquedas con múltiples condiciones y búsquedas con filtros. Estos conceptos son fundamentales para aprovechar al máximo las capacidades de búsqueda de Elasticsearch. En el próximo tema, exploraremos cómo actualizar y eliminar datos en Elasticsearch.

© Copyright 2024. Todos los derechos reservados