Lucene es el motor de búsqueda en el que se basan Solr y otros proyectos tales como Elasticsearch. Veamos cómo funciona y cuales son sus caractéristicas principales :

¿Qué es Lucene?

Lucene es un motor de búsqueda de texto de código abierto, es decir, que los derechos pertenecen a toda la comunidad. En ese sentido, tiene una extensa y sólida comunidad en línea que constantemente está implementando mejoras.

Lucene es un una librería de “búsqueda completa” de textos. Cuando decimos que es de “búsqueda completa” queremos decir que no se basa en los datos contenidos en una base de datos sino que examina todos las palabras de un texto.

Fue desarrollado originariamente por Doug Cutting en 2000 y desde entonces ha ido evolucionado por la mencionada comunidad.

Asi pues, Lucene es solo biblioteca de códigos, por tanto no es un servidor ni un rastreador web.

Proyectos basados en Lucene

Los proyectos basados en Lucene son varios, entre los que podríamos destacar:

  • Apache Solr
  • Elastic Search
  • Compass
  • Doc.Fetcher

Aquí nos centramos especialmente en Solr. Solr es, pues, una de las plataformas construidas sobre la librería de búsquedas de Solr.

En este post nos centramos en las diferencias de Solr con otra de las aplicaciones basadas en Lucene, Elastic Search.

Nos hemos centrado en analizar, de entre el resto de tecnologías, la relativa a Solr Apache porque Solr aporta estas características positivas:

• Solr es altamente escalable. Es decir, el usuario puede aumentar su capacidad añadiendo otros ordenadores/servidores al sistema. • Se pueden añadir componentes que amplíen sus capacidades. Por ejemplo, podemos añadir componentes que permitan una búsqueda geoespacial • Tiene una comunidad de desarrolladores muy activa

Cómo funciona Lucene

El funcionamiento de Lucene consta de dos subprocesos:

  • Añadir información, es decir, realizar un proceso llamado indexación
  • Buscar información, es decir, que un usuario haga una query mediante Lucene

indexado y busqueda de información con Lucene

Usando los términos específicos en inglés hablaríamos de indexing y searching, indexing sería añadir los documentos a lo que se llama técnicmante IndexWriter, y searching sería recuperar dichos Docuentos vía los que se llama técnicamente un IndexSearcher

Empecemos por el proceso de añadir información en el proceso de funcionamiento de Lucene, es decir, el proceso de indexado.

El primer paso en la puesta en marcha de Lucene empieza cuando la persona encargada de implementar Lucene escribe su propio código para realizar el indexado de los archivos de contenido, generalmente utilizando la Interfaz de Usuario Administrador.

La configuración necesaria para convertir los archivos en documentos del índice la lleva a cabo, por tanto, el responsable de la implementación en función de los objetivos de los usuarios y de otros aspectos tales como el formato del archivo a indexar, el tipo de campo, etc.

Este punto merece ser resaltado, en Lucene no hay archivos de configuración sino que es la persona responsable de la implementación del motor de búsqueda el que escribirá su propio código empleando por ejemplo la Interfaz de Usuario.

Dicha configuración convertirá el texto en una serie de tokens, cuyo equivalente aproximado sería una palabra clave.

Los archivos de contenido pueden ser de diversas fuentes: pueden ser bases de datos tanto SQL como NoSQL, archivos en PDF, información de otras webs, etc

En ese sentido, hay que resaltar que un documento para Lucene es una unidad de búsqueda. Es decir, es simplemente una colección de campos, que son pares de nombre-valor. Un índice puede estar formado por uno o más documentos.

El segundo paso consiste en que el usuario proporciona los archivos a indexar. Indexar sería equivalente a importar. Es decir, Lucene importa los archivos que le proporciona el usuario y sobre los quese pretende más adelante realizar la búsqueda.

En ese proceso de indexación se realiza una serie de transformaciones, de más sencillas como convertir las mayúsculas en minúsculas, a más complicadas como sustituir una palabra por sus sinónimos. Así pues, el texto sigue un proceso por el que pasa por una serie de etapas llamado análisis de texto.

El tercer paso se da cuando el motor de Lucene convierte dichos archivos en documentos, que son una colección de campos que tienen asociado un valor. Dicho de otra manera, Lucene crea un Indice invertido.

Y qué es un índice invertido en Lucene:Es un índice que en lugar de a partir de las páginas del texto obtener palabras, lo que hace es a partir de las palabras determinar las páginas en que aparecen.
etapas en el funcionamiento de Lucene

A partir de aquí tenemos el índice invertido creado, y empieza el segundo subproceso en el funcionamiento de Lucene, la búsqueda de información, lo que se llamaría en inglés hacer una query con Lucene.

En este cuarto paso empieza el proceso de búsqueda con Lucene. En este proceso de búsqueda, Lucene asigna una puntuación numérica a cada documento que coincide con la búsqueda del usuario, y solo se devuelven los documentos que han obtenido la puntuación más alta.

Este proceso de búsquedas tiene las siguientes características principales:

• El mencionado índice invertido para la obtención de los documentos buscados, que puede contener datos núméricos y datos en forma de fecha. • Un tipo de búsqueda muy diversa, que, por ejemplo, permitiría una búsqueda de acuerdo a una coincidencia difusa (fuzzy matching). • Así pues y en general, la búsqueda podría llegar a hacerse por criterios muy flexibles que podrían no tener que hacer una búsqueda esperando una coincidencia literal exacta, sino aproximada, u otros criterios que tengan en cuenta la cercanía espacial.

Finalmente y cómo quinto paso, Lucene presenta los resultados de la búsqueda. Lucene contiene un algoritmo que permite puntuaciones muy eficientes basadas en principios de Obtención de Información (Information Retrieval IR) que colocan en primer lugar las mejores coincidencias.

En la presentación de los resultados de búsqueda, Lucene proporciona más utilidades además de ordenar los resultados de búsqueda por relevancia. Podría, por ejemplo, resaltar (highlighting) determinadas palabras.