Introducción Búsquedas Avanzadas con Elasticsearch
Héctor Rodes
@hector_rodes
hector dot rodes at gmail dot com
Qué vamos a ver?
- Qué es una búsqueda full text
- Algunas opciones para poder implementarlas
- Cómo lo pongo en marcha
Tenemos poco tiempo así que...
Búsquedas Full Text
- En ocasiones las búsquedas sencillas (indexOf o un like %) no son suficientes
- Necesitamos opciones avanzadas de búsqueda que nos permitan
- búsquedas sobre una gran cantidad de campos
- busque sobre sinónimos, sobre raíces de palabras
- Ofrezca búsquedas relacionadas
- ...
- La definición en la wikipedia. full text search
Algunas opciones
- Lucene
- Solr
- Elasticsearch
Lucene
- Lucene se define de la siguiente manera
- "provides Java-based indexing and search technology, as well as spellchecking, hit highlighting and advanced analysis/tokenization capabilities"
- Es una biblioteca de "bajo nivel" para montar motores de búsqueda
Solr
- Solr se define de la siguiente manera
- "high performance search server built using Lucene Core, with XML/HTTP and JSON/Python/Ruby APIs, hit highlighting, faceted search, caching, replication, and a web admin interface"
- Es un motor de búsqueda que facilita las tareas que haríamos programáticamente con lucene además de incluir toda una serie de funcionalidades extra muy interesantes
elastic
- Se define en la wikipedia de la siguiente manera
- "Elasticsearch is a search server based on Lucene. It provides a distributed, multitenant-capable full-text search engine with a RESTful web interface and schema-free JSON documents. Elasticsearch is developed in Java and is released as open source under the terms of the Apache License"
- Es otro motor de búsqueda basado en lucene
Qué opción tomar
- Lucene si necesitas añadir una funcionalidad avanzada pero sencilla de búsqueda a tu aplicación
- Solr o elastic si necesitas funciones de búsqueda realmente avanzadas a tu sistema
Solr o elastic
- elastic nace mucho después que Solr y presenta algunas ventajas
- Pensado para escalar horizontalmente desde su nacimiento
- Pensado para que se pueda configurar, gestionar y explotar con un api REST
- Más sencillo de configurar a nivel general
Primeros pasos
- Puntos a considerar
- Conceptos
- Insertar documentos
- Consultar documentos
Puntos a considerar
- Elastic es un motor de búsqueda orientado a documentos
- A la hora de buscar documentos se ejecuta un algoritmo de scoring que puntúa los documentos
- Es muy importante definir correctamente la estructura de los documentos
- Es muy importante identificar los tipos de consultas y como queremos que estas se comporten
Puntos a considerar
- Primero optimizar las consultas para que sean precisas
- Después optimizar para escalar
Conceptos
- Índice es equivalente a un esquema de base de datos
- Tipo es equivalente a una tabla. Realmente es un tipo de documento
Insertar documentos
- Previo a introducir un documento en el índice este se analiza
- Troceándolos en palabras (tokenizer)
- Aplicando transformaciones sobre las palabras como como pasar las palabras a minúsculas (filters)
- Evitando que ciertas palabras entren al índice como determinantes, artículos, ... (filters)
- ...
Insertar documentos
- Elastic ofrece toda una serie de analizadores preconfigurados y la posibilidad de crear analizadores personalizados
- Uno muy interesante es el snowball analyzer
- Los analizadores se definen a nivel de índice para que puedan ser usados en los diferentes tipos
Tipos
- En un índice puede haber documentos de diferentes tipos
- Cada tipo presenta unas propiedades
- Estas propiedades pueden ser analizadas, no analizadas y no indexadas
Insertar documentos
- Debemos indexar solo aquellos campos que van a ser usados en búsquedas
- Debemos analizar solo los campos que sea necesario
- Debemos usar los analizadores menos costosos siempre que sea posible
Consultar documentos
- Para consultas elastic ofrece queries y filters
- Aunque sintácticamente son muy parecidos su uso es bastante diferente
- Las queries deben ser usadas para todos aquellos casos en los que respondemos a cómo de bien este documento responde a...
- Las queries implican ejecutar el algoritmo de scoring y por tanto son costosas
- Los filtros sin embargo simplemente determinan si un documento cumple o no una condición y son facilmente cacheables
Dudas / Preguntas
Text
Muchas Gracias
Text
Introducción full text search con elasticsearch
By hrodes
Introducción full text search con elasticsearch
- 592