Trabajando con múltiples cores con Apache Solr.
0. Índice de contenidos.
- 1. Introducción.
- 2. Entorno.
- 3. Instalando Solr.
- 4. Configuración general.
- 5. Configurando el core.
- 6. Actualizando los índices.
- 7. Consultando los datos.
- 8. Referencias.
- 9. Conclusiones.
1. Introducción
Como ya nos explicó Jose Manuel, Solr es un motor de búsqueda de documentos de código abierto, que permite configurar comportamientos en la búsqueda e indexación de dichos documentos.
Pueden existir situaciones en las que queramos definir diferentes índices y esquemas de datos en una misma instancia de Solr. Definir diferentes cores.
En este tutorial vamos a ver cómo configurar Apache Solr para que, con una única instancia, tengamos disponibles distintos cores con sus respectivos índices y esquemas de datos.
2. Entorno.
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro 15′ (2.2 Ghz Intel Core I7, 8GB DDR3).
- Sistema Operativo: Mac OS Snow Leopard 10.6.7
- Apache Solr 3.5.
- Mozilla Firefox 9.
3. Instalando Solr.
Lo primero que haremos será descargarnos la última versión de Solr. En nuestro caso será la 3.5.
A continuación, descomprimimos su contenido y observamos la estructura de directorios.
Como podemos observar existe un directorio multicore/ dentro del directorio example que viene con la distribución (${SOLR_HOME}/example/multicore/). Pues bien, vamos a destripar un poco este ejemplo para ver cómo está montado.
4. Configuración general.
Abrimos el fichero ${SOLR_HOME}/example/multicore/solr.xml y vemos lo siguiente:
<?xml version="1.0" encoding="UTF-8" ?> <solr persistent="false"> <cores adminPath="/admin/cores"> <core name="core0" instanceDir="core0" /> <core name="core1" instanceDir="core1" /> </cores> </solr>
Como podemos observar, se definen dos cores distintos: core0 y core1, que serán administrados desde el path /admin/cores relativo al despliegue de Solr. A cada uno de los cores le damos un nombre distinto y definimos un directorio donde se alojará la configuración propia de cada uno y el índice que maneje. Además, Solr permite definir otras propiedades a modo de nombre valor:
- dataDir: directorio sobre el que se almacenarán los datos del índice del core. Por defecto será data/
- configName: nombre del fichero de configuración del core. Por defecto es solrconfig.xml.
- schemaName: nombre del fichero donde se define el esquema a utilizar. Por defecto es schema.xml.
5. Configurando el core.
Vamos ahora con la configuración propia de cada core. Por ejemplo la del core0. Si vamos al directorio ${SOLR_HOME}/example/multicore/core0/ vemos que tenemos dos directorios: conf y data.
En el directorio conf estarán los ficheros de configuración propios del core (del core0). Vamos a cambiar el esquema para que se comporte de manera distinta a la que viene en la distribución. En el directorio ${SOLR_HOME}/example/solr/ tenemos otro ejemplo de funcionamiento de Solr (este con un único core), así que vamos a hacer que nuestro core0 se comporte como el de este ejemplo. Para ello nos vamos al directorio ${SOLR_HOME}/example/solr/conf/ y copiamos el fichero schema.xml y los .txt en el directorio de configuración del core0. Ahora el core0 indexará los datos de la misma forma que en el ejemplo que tiene un único core.
El core1 vamos a dejarlo tal y como está. Si abrimos los dos ficheros schema.xml (${SOLR_HOME}/example/multicore/core0/conf/schema.xml y ${SOLR_HOME}/example/multicore/core0/conf/schema.xml) veremos que son distintos, por lo que la información con la que nutriremos a los índices será distinta, al igual que los datos devueltos.
6. Actualizando los índices.
Vale, pues lo siguiente que debemos hacer es actualizar los índices de nuestros dos core. Para ello lo primero es arrancar Solr para que funcione acorde con el ejemplo de multicores. Nos vamos al directorio ${SOLR_HOME}/example/ y tecleamos lo siguiente:
java -Dsolr.solr.home=multicore -jar start.jar
Si estamos en local y nos vamos a http://localhost:8983/solr veremos la consola de administración para cada uno de los dos módulos
Y pulsando sobre cualquiera de los dos enlaces accederemos a la administración del core correspondiente. En este caso al core0.
Bien, lo siguiente que haremos será actualizar los datos de los índices. Para ello, en la propia distribución de Solr vienen datos de prueba. Recordemos que nuestros cores tienen esquemas de datos distintos, por lo que tendremos que suministrar los datos correspondientes con cada core.
En el directorio ${SOLR_HOME}/example/exampledocs/ tenemos varios documentos de prueba que se corresponden con el esquema de datos del core0. En concreto los que acaban en .xml.
La URL a la que enviaremos las peticiones con los datos del índice del core0 será (si estamos en local) http://localhost:8983/solr/core0/update. Para enviar los datos, la distribución de Solr nos trae un jar diseñado para ese propósito. Pues bien, en el directorio exampledocs/ tecleamos lo siguiente:
java -jar -Durl=http://localhost:8983/solr/core0/update post.jar *.xml
Lo mismo hacemos con el core1. Los datos que se corresponden con su esquema están en ${SOLR_HOME}/example/multicore/exampledocs/. Por lo que tecleamos desde el directorio ${SOLR_HOME}/example/exampledocs/ lo siguiente:
java -jar -Durl=http://localhost:8983/solr/core1/update post.jar ../multicore/exampledocs/*.xml
Y listo, ya tendríamos nuestros dos índices con unos datos de prueba.
7. Consultando los datos.
Bueno, pues vamos a ver si ahora somos capaces de consultar los datos que tenemos almacenados en cada uno de los índices de nuestros cores.
La url donde irán las consultas al core0 será http://localhost:8983/solr/core0/select mientras que para el core1 será http://localhost:8983/solr/core1/select
Consultando en el índice del core0 todos los equipos electrónicos que contengan la palabra «belkin» obtendríamos lo siguiente:
Consultando en el índice del core1 todos los equipos cuyo nombre comience por «iPod» obtendríamos lo siguiente:
Observemos que los tipos de datos devueltos son muy diferentes, como diferentes son los esquemas de cada uno de los dos cores que tenemos configurados.
8. Referencias.
- Solr: Core Admin.
9. Conclusiones.
En este turotial hemos visto cómo configurar varios cores en una misma instancia de Solr. Esta solución puede ser interesante cuando tenemos varios esquemas para indexar diferentes tipos de documentos, pero queremos tenerlo centralizado en un único sitio.
Espero que este tutorial os haya sido de ayuda. Un saludo.
Miguel Arlandy
Twitter: @m_arlandy
Hola. me parece muy interesante éste tema, porfavor podrías ayudarme, tengo 2 multicores pero cuando hago la busqueda para obtener todos los resultados que contengan cierta palabra no me funciona.
Hago esto
http://localhost:8983/solr/pcore/select/?q=Python&version=2.2&start=0&rows=10&indent=on
y no funciona
Pero cuando hago esto
http://localhost:8983/solr/pcore/select/?q=Python*&version=2.2&start=0&rows=10&indent=on
si funciona pero sólo si \\\’Python\\\’ está en la primera palabra.
Gracias por la respuesta. Ah! por cierto
uso como types de los campos, text_general y String con el MultiValued=\\\»true\\\».
gracias. saludos
Hola EriOsMurrugarra,
esto es porque te falta un tokenizer con el que le digas a Solr que tiene que separar ese campo en palabras. Créate un tipo de campo nuevo de la siguiente forma:
Y en el campo que desees le asignas este tipo, haz un update (actualiza los índices) y creo que te funcionará como deseas. Puedes leer más sobre Analizers, Tokenizers y Filters de Solr en http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
Un saludo.
Muy bueno el tutorial.
Una Pregunta, ya esta funcionando el Solr admin (example) y me realiza la busqueda de los arcivos que estan como ejemplo. mi pregunta es, como le puedo indicar a mi archivo php que debe utilizar el sorl para hacer busquedas realcionadas a mi base de datos?, como lo implemento?
Gracias por tu ayuda
Hola Eriksaiya,
Para realizar búsquedas lo único que tienes que hacer es realizar peticiones http de la misma forma que hemos hecho en este tutorial (ej: http://localhost:8983/solr/core1/select/?q=… ) desde tu código PHP, luego recuperas el resultado y lo presentas como creas conveniente.
Quizá estos tutoriales de Jose Manuel te puedan ser de ayuda: http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=apacheSolrIntro
http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=apacheSolrJavaApi
Un saludo