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