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
- 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_analizadorque utiliza el analizador estándar y elimina las palabras vacías en inglés. - Mapeamos el campo
contenidocomo tipotexty especificamos que debe ser analizado conmi_analizador.
- 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."
}
- Realización de Búsquedas de Texto Completo
Para realizar una búsqueda de texto completo, utilizamos la consulta match. Aquí hay un ejemplo:
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
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
- Crea un índice llamado
libroscon un analizador personalizado que elimine las palabras vacías en español. - 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
- Realiza una búsqueda en el índice
librospara encontrar documentos que contengan el término "Mancha". - Realiza una búsqueda en el índice
librospara 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.
Curso de Elasticsearch
Módulo 1: Introducción a Elasticsearch
- ¿Qué es Elasticsearch?
- Instalando Elasticsearch
- Conceptos Básicos: Nodos, Clústeres e Índices
- Arquitectura de Elasticsearch
Módulo 2: Empezando con Elasticsearch
Módulo 3: Técnicas Avanzadas de Búsqueda
Módulo 4: Modelado de Datos y Gestión de Índices
- Mapeo y Analizadores
- Plantillas de Índices
- Alias y Reindexación
- Gestión del Ciclo de Vida del Índice
Módulo 5: Rendimiento y Escalabilidad
- Optimizando el Rendimiento de Búsqueda
- Escalando Elasticsearch
- Monitoreo y Mantenimiento
- Respaldo y Restauración
Módulo 6: Seguridad y Control de Acceso
- Asegurando Elasticsearch
- Autenticación y Autorización de Usuarios
- Control de Acceso Basado en Roles
- Auditoría y Cumplimiento
Módulo 7: Integraciones y Ecosistema
- Elasticsearch con Logstash
- Elasticsearch con Kibana
- Elasticsearch con Beats
- Elasticsearch con Otras Herramientas
