Jun 142014
 
Artículo Java

Solr se define a sí mismo como una “plataforma de código abierto empresarial de búsqueda”. En este artículo vamos a examinar la funcionalidad que ofrece Solr, y explicaremos la manera de instalarlo en un servidor Linux.

Funcionalidad

En la página principal del sitio web oficial de solr se ofrece una breve descripción de la funcionalidad que ofrece este software:

Solr es un servidor de búsquedas con un interfaz de programación (API) de tipo REST. En solr se introducen documentos en formato XML, JSON, CSV o binario, en lo que se conoce como “indexación”. Después se pueden realizar consultas sobre el contenido indexado, y se obtienen los resultados, también en formato XML, JSON, CSV o binario.

Según la página principal de solr, las características más destacables de este servidor de búsquedas son:

  • Capacidades avanzadas de búsqueda de texto completo (“Full-Text Search”)
  • Optimizado para un tráfico web elevado
  • Interfaces abiertas basadas en estándares – XML, JSON y HTTP
  • Completas interfaces web de administración
  • Estadísticas del servidor expuestas mediante JMX para su monitorización
  • Escalable linealmente, replicación automática del índice, recuperación automática
  • Indexación cuasi-inmediata
  • Flexible y adaptable a través de una configuración en formato XML
  • Arquitectura extensible mediante plugins

Además, solr utiliza la librería de búsqueda Lucene y amplía sus funcionalidades, ofreciendo:

  • Un esquema de datos que contempla tipos numéricos, campos dinámicos y claves únicas
  • Potentes extensiones del lenguaje de búsquedas de Lucene
  • Búsqueda y filtrado multi-dimensional (“Faceted Search”)
  • Búsqueda Geoespacial, con soporte para múltiples puntos por documento y geopolígonos
  • Análisis de Texto avanzado y configurable
  • Optimizaciones de rendimiento
  • Configuración externa mediante XML
  • Interfaz de administración basado en AJAX
  • Búsqueda distribuída altamente escalable, con índice compartido por varios servidores.
  • Análisis e indexación de documentos en formatos PDF, Word, HTML, etc., utilizando Apache Tika
  • Integración con Apache UIMA para extracción de metadatos configurable
  • Múltiples índices de búsqueda

Prerequisitos: Instalación de Java jRE

Solr requiere que el entorno de ejecución de java (JRE) versión 1.7 o superior esté instalado en el sistema.

Si el sistema en el que se desea instalar Solr no dispone ya de un entorno de ejecución java compatible, se puede realizar la instalación del mismo como se explica a continuación.

En primer lugar, descargamos el paquete de instalación desde la web de Oracle:

http://www.oracle.com/technetwork/java/javase/downloads/index.html.

En nuestro caso, hemos descargado “Server JRE (Java SE Runtime Environment) 8u5”. El fichero descargado se llama server-jre-8u5-linux-x64.tar.gz, y ocupa 56 MB.

Una vez descargado, basta con descomprimirlo en el directorio en donde queremos que resida. En principio, no son necesarios privilegios de superusuario, porque el paquete es autocontenido y no instala nada en directorios del sistema.

En nuestro caso, creamos un directorio “solr” bajo el directorio de login, en él, vamos a poner tanto el JRE de Java como el software de solr:

Instalación de Solr

En primer lugar, accedemos al sitio web oficial de Solr para descargar el paquete de instalación. En nuestro caso, el fichero descargado se llama solr-4.8.1.tgz y ocupa 146 MB.

Descomprimimos el fichero descargado con el comando:

Ejecutamos el ejemplo que viene incluido en la instalación:

y con esto ya podemos visitar desde nuestro navegador la url http://localhost:8983/solr/, y ver el aspecto que presenta la pantalla de administración de Solr:

solr-admin-screen

 

Seguridad

Por defecto, la instalación de Solr no tiene ningún tipo de seguridad. Si el servidor en el que hemos realizado la instalación está conectado a internet, cualquier usuario puede acceder a la url http://NOMBRE_DEL_SERVIDOR:8983/solr/, y manipular el contenido de solr.

Hay muchos posibles modos de proteger la instalación de accesos no autorizados. A continuación explicamos dos configuraciones típicas.

Permitir el acceso directo a jetty únicamente a conexiones locales

Quizá la manera más habitual de proteger la instalación de solr sea modificar la configuración de jetty (o del container que estemos utilizando) para que sólo permita accesos desde localhost.

Para ello, editamos el fichero /web/jetty.xml, y modificamos las líneas <Set name=”Host”>…</Set> para que queden de la siguiente forma:

Para permitir el acceso remoto al interfaz de administración de jetty, debe haber otro servidor web (normalmente, apache) ejecutándose en la misma máquina. En dicho servidor web, configuraremos un “proxy inverso”, para redirigir hacia http://localhost:8983/solr/ las solicitudes que llegan a http://servidor/solr/. En este caso, es el acceso al proxy inverso el que protegemos con usuario y contraseña.

Esto se hace añadiendo al fichero de configuración de apache las siguientes líneas:

En el directorio “/directorio/de/htpasswd” debemos crear el fichero .htpasswd que contendrá el nombre de usuario y contraseña a los que se permitirá acceso al panel de administración de solr. Este fichero se puede crear con el comando “htpasswd” incluido en la instalación de apache. Por ejemplo:

Proteger el acceso a jetty con usuario y contraseña

Alternativamente, si el servidor en el que se ejecuta solr no dispone de una instalación de apache, podemos modificar la instalación jetty de ejemplo, para que solicite un usuario y contraseña:

1. En example/etc/webdefault.xml, añadimos:

2. En example/etc/jetty.xml, añadimos:

3. Creamos un fichero example/etc/realm.properties, conteniendo el nombre de usuario, la contraseña y el rol asociado:

Y de esta manera, tras reiniciar el container, al acceder a la consola de administración de solr nos solicitará un usuario y contraseña.

Si hemos realizado adecuadamente la configuración, podremos acceder con usuario “admin” y contraseña “secreta”.

Instalación de Solr en otros containers

El container Jetty incluido en el paquete de instalación puede ser adecuado en muchos casos. Pero si necesitamos instalar Solr en otro tipo de container, la wiki de Solr incluye documentación sobre la instalación Solr en los containers más ampliamente utilizados:

Indexación de documentos en Solr

Como hemos comentado al comienzo de este artículo, en primer lugar hay que insertar en Solr un conjunto de documentos, sobre cuyo contenido se realizarán las búsquedas.

En solr se pueden introducir tipos muy distintos de documentos, de entre los cuales los documentos estructurados son los que mejor pueden aprovechar todas las características de este motor de búsquedas.

A continuación podemos ver un ejemplo de un documento estructurado en formato JSON:

En este ejemplo, vemos que el documento es la referencia de un libro. La información que contiene está organizada en forma de un conjunto de atributos con nombre y valor. Esto nos permitirá después utilizar estos atributos en las búsquedas que realicemos.

En el subdirectorio examples/exampledocs, podemos encontrar una serie de ficheros que contienen conjuntos de documentos estructurados listos para ser insertados en solr. En concreto, el fichero examples/exampledocs/books.json contiene el ejemplo que hemos presentado más arriba, junto con otros documentos del mismo tipo, dentro de un array JSON.

Podemos insertar el conjunto de documentos contenidos en “books.json” utilizando la utilidad “post.jar” incluida en el paquete, de la siguiente forma:

Por defecto, post.jar inserta documentos en solr realizando solicitudes HTTP POST a la url http://localhost:8983/solr/update. Pero es posible modificar ésta y otras opciones añadiendo parámetros en la llamada a solr. Por ejemplo, si hemos instalado solr en un contenedor Tomcat, que utiliza el puerto 8080, podemos añadir el parámetro “url” para indicar la url que debe utilizar post.jar al conectarse a solr:

En el ejemplo hemos visto también que se utiliza el parámetro “type” para indicar el formato del fichero a indexar.

Realizar búsquedas en solr

El panel de administración de solr permite realizar búsquedas sobre los documentos indexados. Para ello, seleccionamos “collection1” en el desplegable “Core selector” del menú izquierdo, y después seleccionamos “Query” en el submenú que aparece debajo:

solr-query

En el formulario que aparece, se presentan muchas opciones que pueden ser utilizadas para especificar los criterios de búsqueda. En nuestro caso,probamos a introducir el texto “Lightning” en el campo “q”. Al pulsar en “Execute Query”, se presenta en pantalla el documento que contiene la palabra “Lightning”, en formato JSON:

Y con esto finaliza esta introducción básica a solr. Naturalmente, queda mucho por explicar sobre la funcionalidad de solr y las opciones de indexación y búsqueda avanzadas, que iremos tratando en próximos artículos de esta serie.

Referencias

Indice de artículos relacionados con solr

 Publicado por en 9:34 am

 Deja un comentario

(requerido)

(requerido)