Hace unos días estaba comentando con Jorge Luis Betancourt (uno de los administradores del sitio iBlog además de amigo personal) sobre que en mi proyecto estábamos recopilando información acerca de soluciones de búsqueda a nivel empresarial; y un nombre vino a ocupar la conversación a partir de ese momento: Apache Solr. Jorge me cuenta que ha trabajado con esta plataforma por más de 1 año en su proyecto, hablándome de sus bondades y además del futuro de la misma; por lo que me puse a buscar más al respecto y mientras más leía sobre Solr, más me gustaba. El objetivo de ese post es hacer una pequeña introducción a Apache Solr, cuáles son sus características, qué es Enterprise Search en sí y exponer algunos ejemplos de aplicaciones serias que lo usan. Espero que les sea de agrado.

Entonces, ¿Qué es Apache Solr?

Según la propia documentación del proyecto: Apache Solr es la plataforma de búsqueda Open Source, increíblemente rápida, parte del proyecto Apache Lucene. Sus características más sobresalientes son: búsqueda por full-text, sobresalto de los resultados de búsqueda, búsqueda por lotes (faceted search), clusterización dinámica, integración con bases de datos, gestión de documentos ricos (Word, PDF) y búsqueda geoespacial. Hay que destacar que Apache Solr es altamente escalable por medio de SolrCloud, el cual es un sistema basado en Apache Zookeeper para el montaje de clusters de Solr. La versión más reciente de Apache Solr es la 5.0, que se dice que es una de las liberaciones con más trabajo. Por eso fue que saltaron de la 4.10.3 a la 5.0 directamente. Los términos principales que se manejan en Solr son:

  • Documento: Ésta es la principal estrucuture para búsqueda e índices. Un documento es la representación en memoria de los valores de los datos que se usarán para las búsquedas. Consiste en una colección de campos
  • Campo: Tiene su propio nombre y valor y consiste al menos de un término. Por lo que cada documento puede ser visto como una lista simple de pares de clave/valor.
  • Término: Es la unidad básica para el indexado
  • Índice: Es la estructura en memoria que usa Lucene para las búsquedas.

¿Qué es Enterprise Search?

La mejor definicion que encontré para Enterprise Search:

Practice of generating content and making it searchable to a defined audience out of multiple enterprise-type data sources like databases or CMS

lo cual quiere decir que es la práctica de la generación de contenido y hacerlo que pueda ser buscado para una determinada audiencia o grupo de usuarios a partir de fuentes de datos empresariales como bases de datos y gestores de contenido. Esto se va a poder entender mejor cuando les hable de los casos de estudio.

Algunas Características de Apache Solr

Ahora profundizaré un poco en las características de Apache Solr.

Búsqueda avanzada de tipo full-text

Si quieres montar un motor de búsqueda interno para tu aplicación, y quieres más flexibilidad de la que te brinda tu base de datos, Solr es la herramienta perfecta para ello. Incluso pudieras realizar búsquedas sobre intervales de tiempo o usando geolocalización. Todo ello lo permite Solr.

Análisis del lenguage

Solr permite configurar diferentes tipos de análisis del lenguage, incluso por campos determinados para un lenguage en específico.

Faceted Search

Esta característica es una de las más poderosas en Solr, por el hecho de que permite realizar búsquedas basadas en un clasificación determinada. En concreto: permite agrupar resultados de una búsqueda determinada que se haya hecho por un término dado, como por ejemplo, si quisiéramos buscar cuántos documentos tiene el valor “La Habana” en el campo “city”. Esto se puede ver más claro en sitios de comercio electrónico como Amazon o eBay (ambos usan Solr) donde cuando se hace una búsqueda de un término dado, se crean varias búsquedas de tipo faceted. Por ejemplo, si buscamos en Amazon, todo lo referente a libros que tengan Apache S como término, saldrían varios resultados de la misma, pero dividido por categorías: Java and Databases, Apache HTTP Server, Study Books, Java Programming, Data Mining, etc. Por tanto, esto serían una búsqueda agrupada del término Apache S para cada una de estas categorías .

Sugerencias

Solr cuenta con componentes para la creación de resultados sugeridos usando algunos algoritmos internos que miden la similaridad entre términos. Esto es muy útil por el hecho de que la autosugerencia es uno de los patrones de interfaz de usuario más intuitivos. (Piensen en la barra de búsqueda de Google).

Intefaz tipo REST

Solr permite exponer sus propios servicios de búsqueda usando REST o estándares abiertos como JSON y XML, por lo que es muy simple consumir datos usando Javascript por HTTP.

Instalación básica de Apache Solr

Para instalar Apache Solr, lo primero sería descargar el paquete de OwnCloud, por el hecho de que pesa más del límite permitido acá. Como Solr depende de Java, será lo primero que se instalará. En mi caso, ya lo tenía instalado, y para comprobarlo pueden ejecutar:
java -version
lo cual arroja en mi laptop el siguiente resultado:
/opt# java -version
java version "1.7.0_75"
OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-1~utopic1)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)

Luego copiamos el archivo a /opt y lo descomprimimos:
cp solr-5.0.0.tgz /opt
tar xvf solr-5.0.0.tgz
Aquí pueden ver como se vería el contenido de la carpeta solr-5.0.0:

solr-5

Luego para iniciar Solr, vamos a la carpeta bin y ejecutamos:
./solr start
y debe arrojar como resultado lo siguiente:
bin# ./solr start
Waiting to see Solr listening on port 8983 [\]
Started Solr server on port 8983 (pid=4856). Happy searching!

entonces podemos visitar la URL de administración de Solr en http://localhost:8983/solr/ y veremos algo como esto:

solr-admin1

Éste es el sitio de administración de Apache Solr, el cual a partir de la versión 5.0 cambió su cara con una interfaz más intuitiva y sencilla. Ahora, pero no hemos indexado ningún dato en Solr, que al final es lo principal que se usa de la plataforma. ¿Cómo lo hacemos? Lo primero es crear la colección de documentos donde subiremos los datos:
./bin/solr create -c gettingstarted
Setup new core instance directory:
/opt/solr-5.0.0/server/solr/gettingstarted
Creating new core 'gettingstarted' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=gettingstarted&instanceDir=gettingstarted

{
"responseHeader":{
"status":0,
"QTime":3353},
"core":"gettingstarted"}


Entonces luego, nos movemos a la carpeta de Solr, y existe un directorio llamado example/exampledocs, que nos servirá para subir datos a la plataforma y así jugar un poco con ella:
# cd /opt/solr-5.0.0/example/exampledocs
# java -Dtype=application/json -Dc=gettingstarted -jar post.jar *.json
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/gettingstarted/update using content-type application/json...
POSTing file books.json to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update...
Time spent: 0:00:00.760

Aquí le especificamos a Solr que lo que subiremos serán JSON a la colección gettingstarted que ya creamos antes y los buscará en la carpeta local donde estamos. Ahora si visitamos de nuevo la interfaz de administración de Solr para la colección getingstarted, debe salir algo como esto:

Solr gettingstarted

Se puede ver que la colección cuenta con 4 documentos, y además a la derecha, se pueden ver los directorios que está usando dicha colección. Esto es importante saberlo cuando se tienen varios nodos de Solr, distribuidos con SolrCloud, para de esa manera saber rápidamente cuál es la información básica de la colección en cuestión. Entonces a la izquierda se pueden ver algunos menus como Analysis, Data Import, Documents, Files, etc; que todo hace referencia a la colección gettingstarted. Uno de estos menus, es precisamente Query, que es donde podremos encuestar a Solr acerca de nuestros documentos:

Solr Query

Si juegan con el campo wt, pueden ver que define cómo Solr devolverá los datos: JSON, CSV, XML, etc. Para conocer más acerca de la sintáxis de consultas a Solr, les recomendiendo que visiten la sección en la wiki del proyecto que es para ello.

Algunas empresas que usan Apache Solr

Hay muchas empresas que hoy usan Apache Solr, y particularmente los servicios de Lucidworks, la cual es una empresa que desarrolló un producto llamado Fusion, el cual ofrece una versión empresarial de Apache Solr y soporte para el mismo. Dicha empresa desarrolla un evento anual llamado Lucene/Solr Revolution donde las empresas exponen cómo usan Solr para resolver sus problemas de búsqueda. En el pasado evento, hubo tres casos de estudio que me dejaron asombrado: Bloomberg, Twitter y Evernote. Por eso en mi blog personal (en idioma inglés), las puse como las charlas técnicas que más me habían gustado del evento. Los videos de las mismas y otros más los tengo en mi poder pero no pesan bastante, por lo que el que esté interesado en ellos, por favor, escríbanme al correo y yo se los comparto sin problema.

Conclusiones

Sólo los invito a que prueben Apache Solr si crearán una aplicación donde la búsqueda sea un punto clave de su plataforma, y verán que no se arrepentirán. Happy Searching !!!