Solr

Publicado por

Solr es un plataforma de búsqueda basado en Lucene, es altamentente fiable, escalable y tolerante a fallos, proporcionando indexación distribuida, replicación, reparto de carga en consultas, conmutación de errores y recuperación automatizada. Solr mejora la búsqueda y la navegabilidad de los sitios de internet más grandes del mundo.

  1. Introducción
  2. Documentos, campo y diseño de esquema
  3. Proceso de indexación y búsqueda

1. Introducción

Sus características principales son: búsqueda de texto completo, resaltado de resultados, búsqueda con facetas, agrupación dinámica, integración de bases de datos, manejo de documentos enriquecidos (Word o PDF) y búsqueda geoespacial.

Solr está escrito en Java y se ejecuta como un servidor stand-alone de búsqueda completa de texto dentro de un contenedor de servlets llamado Jetty. Solr utiliza la librería de búsqueda en Java Lucene como parte de su core para indexación de texto completo.

Solr proporciona una API REST (HTTP/XML) y otra JSON lo que hace fácil integrar con otros sistemas o aplicaciones independientemente del lenguaje de programación utilizado.

Solr facilita la capacidad de buscar a través de los siguientes pasos:

  • Definir un esquema. EL esquema le dice a Solr como es el contenido de los documentos que va a indexar
  • Alimentar los documentos de Solr para los que los usuarios van a buscar
  • Exponer funcionalidad de búsqueda en la aplicación

Como Solr esta basado en proyectos open source y estándares, es muy extensible. Las consultas Solr son RESTful, lo que significa en esencia es que una consulta no es más que un simple petición HTTP por URL donde la respuesta es un documento estructurado: principalmente un XML, aunque también puede ser JSON, CSV o cualquier otro formato. Esto quiero decir que existen un montón de posibilidades para los clientes de Solr.

Solr ofrece soporte para la búsqueda de palabras clave a través de consultas complejas de varios campos y resultados de búsqueda “faceteados”.

Escalado y replicación

Solr utiliza el Sharding como técnica de escalado en la que una colección se divide en múltiples partes lógicas llamados shards con el fin de ampliar el número de documentos en una colección más allá de lo que podría caber físicamente en un solo servidor. Las consultas entrantes son distribuidas a cada shard de la colección, que responde con resultados combinados.

Una de las técnicas disponibles para mejorar el rendimiento de Solr es la de incrementar el “Factor de replicación” de la colección, esto permite añadir servidores con copias adicionales de la colección para manejar un número mayor de consultas concurrentes, repartiendo las peticiones sobre múltiples máquinas.
El sharding y la replicación no son exclusivas entre si, y en conjunto hacen de Solr una plataforma potente y escalable.

Una forma de entender como funciona Solr, es pensar en las hojas sueltas de un libro de recetas. Cada vez que añades una receta al libro, actualizas el índice de la última página. Se lista cada ingrediente y la página de la receta que acabas de añadir. Imagina que añades un centena de recetas. Utilizando el índice, se pueden buscar recetas muy rápidamente que utilicen un ingrediente en concreto. Utilizar el índice es mucho más rápido que ir buscando receta por receta.

Modelo de datos

En Solr un índice se compone de documentos que se corresponde con una colección de campos. Si se tuviera que realizar un símil entre el modelo de datos aplicado en Apache Solr con el de un modelo de datos relacional se podrían sacar las siguientes similitudes:

  • Un índice es similar a una table de base de datos.
  • Un documento es similar a un registro de una base de datos.
  • Un campo tiene el mismo significado que una columna en un tabla de base de datos.

Cada campo de un documento puede ser indexado, almacenado o ambas cosas a la vez. A continuación se describe cada uno de los significados

  • Un campo indexado es un campo sobre el cual se permiten realizar búsquedas y además es ordenable. Los campos indexados no son devueltos en las consultas.
  • Un campo almacenado es un campo el cual es devuelto en el resultado de la búsqueda.
  • Si un campo es tanto indexado como almacenado, el campo permite que se pueda buscar por dicho campo y será ordenable. Además, dicho campo será devuelto en los resultados de la búsqueda.

2. Documentos, campos y diseño de esquema

La premisa fundamental de Solr es simple. Le das mucha información y después le haces preguntas para encontrar la pieza de información deseada. La parte en la que se introduce toda la información se denomina indexación y cuando se hace una pregunta se denomina consulta.

Lo unidad básica de información en Solr es el documento, que no es más que un conjunto de datos que describen algo. Un documento “receta” contendrá los ingredientes, las instrucciones, el tiempo de preparación, las herramientas necesarias, etc, para realizarla.

En el universo de Solr, los documentos están compuestos de campos, que son piezas de información más especificas.

Los campos pueden contener diferentes tipos de datos: texto, números, etc. La definición de un campo es flexible, y si se definen correctamente, Solr podrá interpretar los documentos correctamente y los usuarios obtendrán mejores resultados cuando realicen una consulta.

Se le puede informar a Solr del tipo de dato de un campo especificando su tipo. El tipo le dice a Solr como interpretarlo y como puede ser consultado. Cuando se añade un documento, Solr obtiene la información de los campos del documento y añade la información a un índice. Cuando ejecutamos una consulta, Solr puede rápidamente consultar el índice y devolver los documentos que coincidan.

Análisis de campo

El análisis de campo le dice a Solr que hacer con los datos de entrada cuando construimos un índice. Un nombre más apropiado para este proceso sería procesamiento o digestión, pero el nombre oficial es análisis.

Por ejemplo, un campo que sea biografía en un documento tipo persona. Cada palabra de la biografía debe ser indexada, así de una manera rápida se puede encontrar a personas cuyo vida tenga algún dato reseñable como “comida” o  “turca”.
Aunque, un campo biografía contendrá muchas palabras que no interesan añadir al índice, como las palabras “el”, “a”, “para”, etc… Imagina también que la biografía contiene la palabra “montaña” y la búsqueda es con letra mayúscula “Montaña”, queremos que Solr sea capaz de solventar este problema automáticamente.
La solución pasa por el análisis de campos. Para el campo biografía, se le puede decir a Solr como romper la biografía en palabras. Se le puede decir que todas las palabras en letras minúsculas, también se le puede decir que elimine los acentos de las palabras.

El análisis de campo es una parte importante del tipo de campo. Para entender a fondo el análisis de campo es necesario conocer los Analyzers, Tokenizers y los Filters.

Ficheros de esquema

Solr guarda detalles sobre los tipos y los campos en un fichero de esquema. El nombre y la localización de estos fichero depende de como este configurado Solr.

  • esquema-gestionado: es el nombre del archivo de esquema que utiliza Solr por defecto para admitir cambios en tiempo de ejecución a través de la API Schema o con las características del modo schemaless.
  • schema.xml: es el nombre tradicional de un fichero de esquema que puede ser editado manualmente por usuarios que utilizan el ClassicIndexSchemaFactory.

Cualquiera que sea el nombre que utilices para la instalación, la estructura de archivos no cambia. Sin embargo, la manera de interactuar con los ficheros si. Si estas utilizando el esquema gestionado, se espera que solo interactúes con el fichero a través de la API Schema y nunca hacer cambios/ediciones manuales.

Sino utilizas el esquema gestionado, solo se permite realizar ediciones manuales al fichero, el API Scheme no va a soportar ninguna modificación.

3. Proceso de indexación y búsqueda

Cuando añadimos contenido a un índice, lo que hacemos es definir un recurso sensible a ser buscado por Solr.
Un índice de Solr puede aceptar datos de diferentes fuentes, incluyendo ficheros XML, CSV, datos extraídos de una tabla, y ficheros en diferentes formatos como son Word o PDFs.

A continuación las tres formas de cargar datos en un índice de Solr:

  • Utilizando el framework Solr Cell construido sobre Apache Tika para ingestar ficheros binarios, o ficheros estructurados como Office, Word, PDF, y otros formatos propietarios.
  • Subiendo ficheros XML a través de peticiones HTTP al servidor de Solr desde cualquier sitio donde la solicitud pueda ser generada.
  • Escribir una aplicación Java para ingestar datos a través de la API de cliente para Solr. Utilizar la API Java es la mejor opción si se esta trabajando en una aplicación, como un CMS.

Independientemente del método utilizado para ingestar datos, existe una estructura de directorios común para los datos que se introducen en un índice Solr.

Si el nombre del campo está definido en el Esquema que está asociado con el índice, entonces los pasos de análisis asociados a ese campo serán aplicados cuando el contenido pase al tokenizer. Los campos que no están especificados explícitamente en el Schema serán ignorados o mapeados a un campo dinámico.

Proceso de búsqueda

Solr ofrece un conjunto de características enriquecidas y flexibles para la búsqueda. Para comprender el alcance de esta flexibilidad, es de ayuda empezar con una introducción de los pasos y componentes envueltos en la búsqueda con Solr.

Cuando un usuario lanza una búsqueda en Solr, la consulta es procesada por el manejador de peticiones. Este manejador es un plugin que define la lógica que hay que utilizar cuando Solr procesa una petición. Solr tiene soporte para multitud de manejadores de peticiones. Algunos están diseñados para procesar consultas de búsqueda, mientras otros administran tareas como la replicación del índice.

Las aplicaciones de búsqueda seleccionan un manejador de peticiones por defecto. Se puede configurar una aplicación para que los usuarios puedan sobreescribir el manejador por defecto en las preferencias.

Para procesar una consulta de búsqueda, el manejador de peticiones llama al parseador de consultas (query parser), que interpreta los términos y los parámetros de una consulta. Hay diferentes parseadores de consultas para dar soporte a multitud de sintaxis. El parseador de consultas por defecto en Solr es conocido como el Standard Query Pasrse, o un nombre más común el parseador de consultas “lucene”. Solr también incluye el parser DisMaxquery y el extended DixMax (eDixMax).

La sinxtaxis del parseador de consultas estándar permite gran precisión en las búsquedas, pero el DisMax es mucho más tolerante a fallos. El DixMax está diseñado para ofrecer un experiencia similar al de los motores de búsqueda más populares de internet como Google, cuando raramente muestran errores de sintaxis a los usuarios.

Enlaces

Apache Solr Reference Guide

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s