Lucene es un motor de búsqueda de alto desempeño escrito en Java. Está diseñado y desarrollado de tal forma que se pueda utilizar en prácticamente cualquier aplicación que requiera búsqueda de texto completo, especialmente aplicaciones multiplataforma.
En esencia, Lucene es una librería que puede ser invocada desde aplicaciones Java para realizar búsquedas. Pero si lo que queremos es una funcionalidad de mayor nivel, y donde no necesariamente tengamos que usar Java, podemos recurrir a Solr. Solr es un servidor de búsqueda basado en Lucene, que provee funcionalidad de más alto nivel, como:
• APIs para XML/HTTP y JSON
• Resaltar resultados
• Cache
• Replicación
Dedicaré el resto de este artículo a explicar como instalar y utilizar una solución de búsqueda utilizando Solr.
1. Instalación de Solr
Para ejecutar Solr requerimos tener instalado un JDK 1.5 o posterior.
Teniendo instalado nuestro JDK, simplemente descargamos la versión más reciente de Solr de http://mirror.x10.com/mirror/apache/lucene/solr/ y extraemos el contenido en nuestra computadora.
Solr se puede ejecutar en cualquier contenedor de Servlets como Tomcat o Jetty. Por simplicidad, para este ejemplo utilizaremos una versión de Jetty que viene incluida en el directorio de ejemplos de Solr. Para arrancar Solr simplemente entramos al directorio examples y ejecutamos el comando:
java -jar start.jar
Esto inicia una instancia de Jetty en el puerto 8983 de nuestra máquina, así que si todo salió bien, debemos poder entrar a http://localhost:8983/solr/admin/ y ver el panel de administración de Solr.
2. Definiendo la estructura de la información
Ya tenemos andando nuestro servidor Solr. Sin embargo, no tenemos datos, por lo que cualquier búsqueda que hagamos regresa 0 resultados. Para agregar datos a Solr primero debemos definir la estructura de la información que indexaremos y almacenaremos para búsqueda.
Al igual que la mayoría de las aplicaciones en Java, la configuración de Solr se guarda en archivos XML. El esquema XML que contiene la definición de la estructura de datos para indexar y almacenar está en el archivo solr/conf/schema.xml.
En schema.xml se definen los campos que tendrán nuestros elementos de información. Para cada campo se puede especificar si se debe indexar (para que se pueda utilizar en búsquedas) y si se puede almacenar (para que se pueda obtener la información localmente). Si la información a buscar está almacenada en una base de datos, puedes indicar a Lucene que indexe los campos, pero que no los almacene. A fin de cuentas, mientras almacene la llave primaria de cada elemento, el documento se puede reconstruir directamente desde la base de datos. Esto reduce fuertemente los requerimientos de almacenamiento de Lucene, y evita duplicar datos.
La sección
El siguiente listado muestra el contenido de los campos definidos para un ejemplo de un catálogo de productos:
Las búsquedas enviadas a Lucene utilizan un solo campo, el cual se especifica utilizando el elemento
El siguiente listado muestra un ejemplo de cómo definiríamos un campo múltiple para el catálogo de productos. Definimos un campo llamado “texto” que es el que utilizaremos para buscar, y que contendrá los valores de nombre, fabricante y características.
3. Agregando documentos a indexar
La forma de alimentar datos a Lucene es a través de documentos XML que contienen instrucciones de indexado para agregar, borrar o actualizar documentos. El siguiente listado muestra un ejemplo del XML a través del cual agregaríamos un nuevo elemento de información. Vean que los campos de información consisten con los que definimos en schema.xml.
El directorio exampledocs contiene ejemplos de instrucciones que Solr puede recibir, así como una utilería en Java (post.jar) para alimentar instrucciones a Lucene desde la línea de comandos.
4. Realizando búsquedas
Las búsquedas se realizan a través de peticiones por HTTP GET en el url /solr/select del servidor donde estés ejecutando Solr. El query de búsqueda se pasa a través del parámetro “q”. Es posible agregar parámetros adicionales para controlar la información que se obtiene. Un url con un query sencillo se vería de la siguiente forma: http://localhost:8983/solr/select?q=monitor
Solr regresa los resultados en forma de XML, así que es posible manipularlos como queramos. Incluso podemos utilizar Solr directamente utilizando un objeto XMLHttpRequest y manipular los resultados con Javascript.
Conclusión
En este artículo apenas echamos un pequeño vistazo a Lucene y Solr. Estas tecnologías son muy flexibles y nos proveen una amplia gama de posibilidades. De hecho, a quienes les interese hacer un ejercicio más sofisticado les recomendamos buscar en Internet los tutoriales que enseñan como utilizar Solr en conjunto con el API de Digg para poder realizar búsquedas de los contenidos de Digg usando Solr.
Ahora que conocen estas tecnologías, esperamos que las tengan en cuenta la próxima vez que requieran incorporar funcionalidad de búsqueda en sus aplicaciones.
Referencias:
• lucene.apache.org
• lucene.apache.org/solr
- Log in to post comments