Conoce Apache Solr con esta Introducción

  • Tiempo de lectura:15 minutos de lectura
  • Autor de la entrada:
  • Última modificación de la entrada:14/07/2024

Hoy en día es común que las aplicaciones modernas tengan capacidades de búsqueda sobre grandes cantidades de datos. Las herramientas como Solr ayudan a implementar estas capacidades de forma rápida, además de proporcionar ayudas al usuario como sugerencias de búsqueda automáticas o categorías. Aprende en esta entrada qué es Apache Solr, para qué se usa y su funcionamiento de manera sencilla.

Apache Solr

¿Qué es Apache Solr?

Solr (también pronunciado «Solar») es una plataforma de búsqueda empresarial popular, rápida y de código abierto construida sobre el motor de búsqueda open source Apache Lucene. Es una tecnología escalable y tolerante a fallos e incorpora indexación distribuida, replicación y equilibrio de carga.

Está desarrollada con el lenguaje de programación Java y también, ofrece una API REST, con la que se pueden guardar documentos JSON, XML, CSV o archivos binarios a través de HTTP en índices. Esto permite que se pueda implementar en los lenguajes de programación más populares

Solr está diseñado para gestionar grandes cantidades de datos, por lo que es utilizado para implementar funciones de búsqueda con SQL en muchos de los mayores sitios y aplicaciones empresariales de Internet.

El proyecto de Apache Solr es desarrollado de forma abierta y colaborativa en la Apache Software Foundation, donde tiene una comunidad muy activa que implementa actualizaciones y mejoras sobre el código regularmente.

Características y Ventajas de Solr

A continuación se resumen las características y las ventajas más importantes que ofrece este motor de búsqueda:

Contando con Apache Lucene como núcleo, Solr implementa funciones para realizar búsquedas avanzadas en texto. Se pueden buscar frases con comodines o concatenaciones en los datos almacenados de forma sencilla.

Facilita la implementación de aplicaciones proporcionando una interfaz abierta basada en una API REST y el uso de estándares XML y JSON.

Tiene una arquitectura escalable y tolerante a fallos. Para mantener la coordinación del clúster, usa Apache Zookeeper, que permite crecer fácilmente el sistema añadiendo más nodos y de esta forma replicar, y distribuir los datos.

Además, Solr tiene una interfaz gráfica de gestión integrada para que los usuarios puedan controlar su instalación desde una ubicación central.

Por último, debemos comprender que es una solución adaptada y adecuada para casos de usos analíticos y de inserción y actualización de datos en tiempo real.

Funcionamiento y Arquitectura de Solr

En esta sección vamos a describir los términos clave usados al hablar de Solr, así como su funcionamiento básico simplificado.

Documento

Un documento es la unidad básica de información que se puede almacenar e indexar. Los documentos se almacenan en colecciones. Los documentos pueden actualizarse, añadirse y eliminarse con el gestor de índices.

Persona {
  "Id": "1333425",
  "nombre": "Oscar",
  "apellido": "Fernandez",
  "direccion": ["Madrid", "Spain"]
}

Los campos almacenan datos de los documentos conteniendo pares clave-valor. La clave es el nombre del campo y el valor contiene los datos. Admite tipos como float, long, double, text, boolean, integer, etc.

Colección

Una colección es un conjunto de fragmentos que forman un índice lógico. Cada colección tiene sus configuraciones y arquitectura, que puede ser diferente de otras colecciones. Se pueden crear, eliminar y listar colecciones a través de la API.

Fragmento

Los fragmentos permiten dividir los índices en una o más partes en cada colección. Cada fragmento se encuentra en un nodo y se aloja en un núcleo.

Nodo

Un nodo es una única instancia de máquina virtual Java que ejecuta Solr, también conocida como servidor. Un nodo puede albergar varios fragmentos.

Réplica

Una réplica es una copia física de un shard que se ejecuta como núcleo de un nodo. Una de estas copias actúa como líder, mientras que el resto de copias de ese fragmento copia los datos del líder.

Líder

El líder es una copia de un fragmento. Cuando se produce una actualización del índice, se envían actualizaciones al resto de copias de ese fragmento. Si el líder tiene un error y deja de estar operativo, una de las otras copias se selecciona de forma automática como nuevo líder.

Esquema de arquitectura en Solr
Esquema de arquitectura en Solr

Para buscar documentos, Apache Solr realiza una serie de operaciones:

La indexación consiste en convertir los documentos guardados en formatos legibles para el sistema. Solr utiliza Lucene para crear un índice invertido, que aumenta la eficiencia de las búsquedas. Este índice lista un mapeo de palabras o términos con sus posiciones en el documento.

Antes de añadir los datos al índice, pasan por un analizador de campos, donde se filtran y tokenizan los datos para facilitar las búsquedas. De esta forma, se descomponen los campos en tokens que se pueden buscar.

En la fase de mapeo, Solr asigna las consultas del usuario a los documentos almacenados en la base de datos para encontrar los resultados adecuados.

Por último, se clasifican los resultados según la puntuación de relevancia, de forma que los más relevantes aparecen en la parte superior.

Solr en Docker y Kubernetes

Solr es compatible con Docker y Kubernetes. También existe un operador de diseñado para gestionar clusters en Kubernetes. Antes de instalar el operador, debemos instalar el operador de Apache Zookeeper.

Enlace a docker hub.

Casos de Uso de Solr

Además de un motor de búsqueda, Solr es una base de datos de documentos distribuida y redundante que proporciona SQL. Debemos tener en cuenta que si lo que necesitamos almacenar son datos sencillos que se buscan por clave, Solr no es la mejor opción, ya que incorpora muchas funcionalidades que no necesitaremos y complicarán el sistema.

Por otro lado, Solr es una opción a considerar cuando debemos implementar búsquedas centradas en texto o análisis de campos de documentos complejos como pueden ser correos electrónicos, archivos de registro o patrones varios.

Relación de Solr y Lucene y sus Proyectos

Técnicamente, Solr es un subproyecto de Lucene y ha sido así durante muchos años. Ambos proyectos se han beneficiado de ello y con la llegada de otros populares motores de búsqueda de código abierto, Solr ha madurado como proyecto de Lucene. Lucene y Solr se mueven a un ritmo de desarrollo muy rápido y es común que no hagan lanzamientos independientes.

Si Lucene adopta una nueva funcionalidad importante, Solr tiene que asegurarse de que su código se pone al día. Tras una votación de la Apache Software Foundation se decidió que ambos proyectos serían proyectos independientes de alto nivel. Se está trabajando activamente para dividir los dos proyectos y establecerlos por derecho propio para que puedan hacer lanzamientos independientes.

En cierta forma Lucene es esencialmente una librería de búsqueda y Solr es una implementación de un motor de búsqueda que usa esa librería. Para el usuario final, el impacto que tiene que Lucene no esté en el mismo proyecto es mínimo. La única cosa que puede cambiar es que la velocidad de release de cambios puede ser distinta entre ambos proyectos.

Cuando realiza una consulta se consulta el índice de Lucene que realiza su propia búsqueda interna. Todo ese índice de búsquedas a nivel de nodo será parte del proyecto Lucene. Para los usuarios de, Lucene es un detalle de la implementación interna de cómo Solr ejecuta sus consultas y no tienen que preocuparse necesariamente de cómo lo hace Lucene o donde está su código. Solo va a actuar como una librería.

Lucene ha tenido una característica durmiente durante muchos años que se llama búsqueda concurrente: básicamente para un solo índice puede generar múltiples hilos y cada hilo escaneará muchos segmentos, por lo que incluso la búsqueda de un solo nodo es muy rápida.

Cómo empezar a usar Solr

Para desplegar Solr fácilmente, sigue estos pasos:

  1. Descarga la última versión aquí.
  2. Descomprime el archivo descargado en un directorio de tu elección, por ejemplo /opt/solr
  3. Crea una nueva instancia llamada myinstance en el directorio de Solr:
    • bin/solr create -c myinstance
  4. Inicia el servidor:
    • bin/solr start
  5. Verifica que el servidor se está ejecutando correctamente visitando la URL local

A continuación, puedes ver un ejemplo de código en Python que muestra cómo indexar y realizar búsquedas en un índice de datos:

# Importa la librería
from solrcloudpy import SolrConnection

# Crea una conexión al servidor de Solr
solr = SolrConnection('http://localhost:8983/solr')

# Indexa un nuevo documento en Solr
solr.index(
    {
        'id': '123',
        'name': 'Oscar',
        'age': 28
    },
    'myinstance'
)

# Realiza el commit de los cambios
solr.commit()

# Realiza una búsqueda en el índice
response = solr.query(
    'myinstance',
    {
        'q': 'name:Oscar'
    }
)

# Muestra los resultados de la búsqueda
print(response.results)

En este ejemplo se importa la librería y se crea una conexión al servidor. Luego se indexa un nuevo documento en el índice y se realiza un commit de los cambios. Se utiliza el método query para realizar una consulta de búsqueda en el índice y se por último, se imprimen los resultados de la búsqueda.

Formación y Cursos recomendados de Solr

A continuación tienes dos cursos para aprender Solr a fondo desde Udemy. Ambos cursos están en inglés, pero te resultará muy fácil de comprender para empezar a usar esta potente herramienta en tus proyectos.

Curso introducción Apache Solr

Curso de Introducción a Apache Solr

Este curso te enseñará desde cero a instalar y configurar la herramienta, modelar e indexar tus datos en Solr y realizar todo tipo de búsquedas y filtros sobre ellos a través de la API REST.

Curso con big data

Aprende Apache Solr con Big Data y Cloud Computing

El curso relaciona Solr con el sector del Big Data y Cloud Computing. Para ello, repasa la problemática básica alrededor de las búsquedas de datos.

Preguntas Frecuentes Apache Solr – FAQ

¿Cuál es la diferencia entre Apache Solr y Lucene?

En cierta forma Lucene es una librería de búsqueda y Solr es una implementación de un motor de búsqueda que usa esa librería. Por lo tanto, depende de Lucene para implementar su motor de búsquedas.

Deja una respuesta