"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