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_analizador
que utiliza el analizador estándar y elimina las palabras vacías en inglés. - Mapeamos el campo
contenido
como tipotext
y 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
libros
con 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
libros
para encontrar documentos que contengan el término "Mancha". - 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.
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