a texto. Esta funcionalidad está presente en los motores de búsqueda que se van a analizar en profundidad:
• Apache Lucene (https://lucene.apache.org) es una potente librería de recuperación de información que se basa en la elaboración de un índice invertido como principal estructura especializada en emparejar documentos de texto con términos de consulta. Lucene, al igual que otros motores de búsqueda, se distingue por la escalabilidad, el rápido despliegue, el manejo de grandes volúmenes de datos y la optimización orientada a búsqueda de textos en documentos.
• Apache Solr (https://lucene.apache.org/solr) es una librería open source construida sobre la librería de Lucene, que incluye una interfaz web de administración, API en distintos lenguajes para la realización de consultas y una serie de mejoras funcionales sobre las características base que trae Lucene de serie.
• ElasticSearch (https://www.elastic.co/es/), construido sobre Apache Lucene, ha basado su modelo en una API REST y ha ganado popularidad en los últimos años. Se trata de una plataforma distribuida en tiempo real de búsqueda y análisis:
− ElasticSearch distribuye y organiza la información en clúster de nodos, por lo que lo podemos ejecutar en varios servidores si nuestra aplicación necesita escalar.
− ElasticSearch es un motor de búsqueda que funciona en tiempo real, ya que los datos están indexados. De esta forma, obtenemos respuestas a nuestras consultas de forma mucho más rápida si lo comparamos con otras soluciones.
En la actualidad, es común que las aplicaciones estén respaldadas por una base de datos sobre la que se implementan las búsquedas. Sin embargo, con este enfoque, la implementación de funcionalidades de búsqueda con cierta complejidad puede llegar a ser complicada debido a las limitaciones de las bases de datos. Por ejemplo, las búsquedas pueden no llegar a ser suficientemente eficientes si el volumen de información es muy grande o si la forma en que está estructurada la información no es la adecuada. En escenarios como estos, una plataforma especialmente dedicada a la optimización de las búsquedas puede resultar una alternativa más práctica y eficiente.
Estas plataformas utilizan un modelo de datos orientado a documentos que pueden pensarse como una base de datos de una sola tabla. Un documento es simplemente un conjunto de campos, como una tupla en una tabla de una base de datos, con la diferencia de que cada columna puede ser multivaluada.
Además, permiten la implementación de funcionalidades de búsqueda sobre documentos que facilitan al usuario la localización de recursos de una manera más rápida y organizada. Tomando como referencia la web DB-Engines, podemos ver que la solución más popular hoy en día es ElasticSearch. En el siguiente URL podemos ver los motores de búsqueda más populares:
https://db-engines.com/en/ranking/search+engine
Figura 1.4 Listado de motores de búsqueda.
De los motores mostrados en la figura 1.4, analizaremos en profundidad tanto ElasticSearch como Apache Solr (ambos basados en Lucene, que nos permite realizar búsquedas por una gran cantidad de datos de un texto específico). Gracias al motor Lucene sobre el que están implementados, estos motores nos ofrecen capacidades de búsquedas de texto, autocompletado y soporte de geolocalización. Podríamos definir a estos motores de búsqueda como bases de datos NoSQL orientadas a documentos JSON, que pueden ser consultados, creados, actualizados o borrados mediante una API REST.
1.6.1 Lucene
Lucene es el corazón de la mayoría de los motores de búsqueda de hoy en día. Básicamente acepta el texto que se va a buscar, lo almacena en una estructura de datos (índice invertido) y, luego, acepta varios tipos de consultas de búsqueda y devuelve un conjunto de resultados que coinciden con los criterios de búsqueda.
Muchas soluciones de búsqueda basadas en servidor, como Apache Solr o ElasticSearch, están construidas sobre Lucene y marcan una evolución en el desarrollo de motores de búsqueda. El objetivo del diseño de estas herramientas es ofrecer un tipo de soluciones que proporcionen escalabilidad y alta disponibilidad a la base que trae Lucene como motor de búsqueda.
En los últimos años han surgido diferentes proyectos de la fundación Apache que también se consideran parte del universo de Lucene. Aunque estos proyectos son independientes, y más conocidos en otros contextos, se pueden integrar de forma sencilla con Lucene. Entre estos proyectos podemos destacar Hadoop, Mahout (un framework para aprendizaje automático), Nutch (una aplicación de búsqueda basada en Lucene) y Tika (que permite analizar documentos en diferentes formatos, como PDF, y se puede utilizar para alimentar con datos un índice de Lucene).
• Hadoop: http://hadoop.apache.org
• Mahout: http://mahout.apache.org
• Nutch: http://nutch.apache.org
• Tika: http://tika.apache.org
Apache Lucene guarda toda la información en una estructura llamada índice invertido. Se trata de una estructura de datos donde para cada término que encontramos en los diferentes documentos, obtiene los índices donde aparecen. Puede pensar en el índice invertido como en una estructura de datos donde estos están orientados a términos en lugar de a documentos.
Entre los conceptos clave que podemos encontrar en Lucene destacan:
• Index: colección de documentos con similares características.
• Type: partición lógica que contiene aquellos documentos que comparten información a través de un atributo.
• Document: unidad básica de información.
• Mapping: incluye datos sobre cómo la información se almacena en el índice en forma de atributos y propiedades, y sobre cómo se debe tratar un campo a la hora de hacer las búsquedas, a nivel de extraer tokens de una determinada cadena de búsqueda.
• Relevancia: son los algoritmos utilizados para clasificar los resultados basados en la consulta.
• Corpus: colección de todos los documentos del índice.
• Segmentos: datos fragmentados que almacenan el índice invertido y permiten buscar en el índice de una manera eficiente.
1.6.2 Índice invertido
El índice invertido es el corazón del motor de búsqueda. Es como una estructura en formato diccionario en un formato clave-valor, donde las claves son los términos que hemos generado con los n-gramas de todos los documentos. Cada índice invertido almacena la posición y el identificador del documento. Para cada término nos dice en qué documentos (indica la posición) aparece cada uno.
El índice invertido se crea por temas de optimización y son las estructuras de datos las que permiten realizar búsquedas sobre los documentos. Por ejemplo, Lucene, debido a su índice invertido, es uno de los motores más rápidos la hora de buscar un término en un campo. Cada campo que se indexa en Lucene se convierte en una estructura de búsqueda rápida para su tipo particular