La búsqueda de texto completo es una de las características más poderosas de Elasticsearch. Permite realizar búsquedas avanzadas en grandes volúmenes de texto, proporcionando resultados relevantes y rápidos. En este tema, aprenderemos cómo funciona la búsqueda de texto completo en Elasticsearch, cómo configurarla y cómo utilizarla de manera efectiva.

Conceptos Clave

Antes de profundizar en la búsqueda de texto completo, es importante entender algunos conceptos clave:

  • Análisis de Texto: Proceso de convertir texto en una forma que pueda ser indexada y buscada. Incluye tokenización, normalización y eliminación de palabras vacías.
  • Tokenización: Dividir el texto en unidades más pequeñas llamadas tokens (por ejemplo, palabras).
  • Normalización: Convertir tokens a una forma estándar (por ejemplo, convertir a minúsculas).
  • Índice Invertido: Estructura de datos que permite búsquedas rápidas. Mapea términos a los documentos que los contienen.

Configuración de la Búsqueda de Texto Completo

  1. Creación de un Índice con Análisis de Texto

Para realizar una búsqueda de texto completo, primero necesitamos crear un índice con un mapeo adecuado y analizadores de texto. Aquí hay un ejemplo de cómo hacerlo:

PUT /mi_indice
{
  "settings": {
    "analysis": {
      "analyzer": {
        "mi_analizador": {
          "type": "standard",
          "stopwords": "_english_"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "contenido": {
        "type": "text",
        "analyzer": "mi_analizador"
      }
    }
  }
}

En este ejemplo:

  • Creamos un índice llamado mi_indice.
  • Definimos un analizador llamado mi_analizador que utiliza el analizador estándar y elimina las palabras vacías en inglés.
  • Mapeamos el campo contenido como tipo text y especificamos que debe ser analizado con mi_analizador.

  1. Indexación de Documentos

Una vez que el índice está configurado, podemos indexar documentos. Aquí hay un ejemplo:

POST /mi_indice/_doc/1
{
  "titulo": "Introducción a Elasticsearch",
  "contenido": "Elasticsearch es un motor de búsqueda y análisis distribuido."
}

POST /mi_indice/_doc/2
{
  "titulo": "Búsqueda de Texto Completo",
  "contenido": "La búsqueda de texto completo permite encontrar documentos relevantes."
}

  1. Realización de Búsquedas de Texto Completo

Para realizar una búsqueda de texto completo, utilizamos la consulta match. Aquí hay un ejemplo:

GET /mi_indice/_search
{
  "query": {
    "match": {
      "contenido": "motor de búsqueda"
    }
  }
}

En este ejemplo, buscamos documentos en el índice mi_indice donde el campo contenido contenga los términos "motor de búsqueda".

Ejemplos Prácticos

Ejemplo 1: Búsqueda Básica

GET /mi_indice/_search
{
  "query": {
    "match": {
      "contenido": "Elasticsearch"
    }
  }
}

Ejemplo 2: Búsqueda con Relevancia

GET /mi_indice/_search
{
  "query": {
    "match": {
      "contenido": {
        "query": "búsqueda texto completo",
        "operator": "and"
      }
    }
  }
}

En este ejemplo, utilizamos el operador and para asegurar que ambos términos ("búsqueda" y "texto completo") deben estar presentes en los documentos coincidentes.

Ejemplo 3: Búsqueda con Realce (Highlighting)

GET /mi_indice/_search
{
  "query": {
    "match": {
      "contenido": "Elasticsearch"
    }
  },
  "highlight": {
    "fields": {
      "contenido": {}
    }
  }
}

En este ejemplo, utilizamos la funcionalidad de realce para resaltar los términos coincidentes en los resultados de búsqueda.

Ejercicios Prácticos

Ejercicio 1: Crear un Índice y Indexar Documentos

  1. Crea un índice llamado libros con un analizador personalizado que elimine las palabras vacías en español.
  2. Indexa los siguientes documentos en el índice libros:
POST /libros/_doc/1
{
  "titulo": "El Quijote",
  "contenido": "En un lugar de la Mancha, de cuyo nombre no quiero acordarme..."
}

POST /libros/_doc/2
{
  "titulo": "Cien Años de Soledad",
  "contenido": "Muchos años después, frente al pelotón de fusilamiento..."
}

Ejercicio 2: Realizar Búsquedas de Texto Completo

  1. Realiza una búsqueda en el índice libros para encontrar documentos que contengan el término "Mancha".
  2. Realiza una búsqueda en el índice libros para encontrar documentos que contengan ambos términos "años" y "fusilamiento".

Soluciones

Solución al Ejercicio 1

PUT /libros
{
  "settings": {
    "analysis": {
      "analyzer": {
        "mi_analizador_es": {
          "type": "standard",
          "stopwords": "_spanish_"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "contenido": {
        "type": "text",
        "analyzer": "mi_analizador_es"
      }
    }
  }
}

POST /libros/_doc/1
{
  "titulo": "El Quijote",
  "contenido": "En un lugar de la Mancha, de cuyo nombre no quiero acordarme..."
}

POST /libros/_doc/2
{
  "titulo": "Cien Años de Soledad",
  "contenido": "Muchos años después, frente al pelotón de fusilamiento..."
}

Solución al Ejercicio 2

GET /libros/_search
{
  "query": {
    "match": {
      "contenido": "Mancha"
    }
  }
}

GET /libros/_search
{
  "query": {
    "match": {
      "contenido": {
        "query": "años fusilamiento",
        "operator": "and"
      }
    }
  }
}

Conclusión

En esta sección, hemos aprendido los conceptos básicos de la búsqueda de texto completo en Elasticsearch, cómo configurar un índice con analizadores de texto, cómo indexar documentos y cómo realizar búsquedas de texto completo. Estos conocimientos son fundamentales para aprovechar al máximo las capacidades de búsqueda de Elasticsearch. En el próximo tema, exploraremos técnicas avanzadas de filtrado y ordenación para refinar aún más nuestras búsquedas.

© Copyright 2024. Todos los derechos reservados