Introducción
Solr es un motor de búsqueda de código abierto basado en la biblioteca Java del proyecto Lucene. Ejecuta sobre un contenedor de servlets, como por ejemplo Apache Tomcat.
La finalidad de Solr es tener un motor de búsqueda interno en nuestro servidor.
Descarga Apache Solr
http://www.eu.apache.org/dist/lucene/solr/4.0.0/apache-solr-4.0.0.tgz
Instalación de Solr 4.0.0 en Apache Tomcat
Para instalar Solr 4.0.0 en Apache Tomcat los pasos a seguir son los siguientes:
1) Descomprimimos el fichero apache-solr-4.0.0.tgz en alguna ubicación de nuestro disco duro, por ejemplo en /home/xxxxxxx/temp/apache-solr-4.0.0
2) Recuperamos el war del directorio dist/apache-solr-4.0.0.war
3) Renombramos el fichero apache-solr-4.0.0.war a solr.war
4) Movemos el fichero solr.war a la carpeta webapps de nuestro tomcat
5) Solr necesita un directorio de trabajo que podemos colocar en cualquier ubicación, en este ejemplo supondremos /home/xxxxxxx/solr
6) Volcamos en la carpeta anterior el contenido de /home/xxxxxxx/temp/apache-solr-4.0.0/example/solr.
7) Tras este volcado, en nuestra carpeta /home/xxxxxxx/solr tendremos:
drwxr-xr-x 2 xxxxxxx xxxxxxx 4096 sep 22 14:36 bin
drwxr-xr-x 4 xxxxxxx xxxxxxx 4096 ene 18 12:34 collection1
-rw-r--r-- 1 xxxxxxx xxxxxxx 2473 sep 22 14:36 README.txt
-rw-r--r-- 1 xxxxxxx xxxxxxx 2203 sep 22 14:36 solr.xml
-rw-r--r-- 1 xxxxxxx xxxxxxx 501 sep 22 14:36 zoo.cfg
8) Ahora arrancamos el Tomcat, con lo que se despliega automáticamente el fichero solr.war que habíamos ubicado en la carpeta webapps del Tomcat en el paso 4). Se generará la carpeta webapps/solr.
9) Ahora paramos el Tomcat.
10) Editamos el fichero webapps/solr/WEBINF/web.xml, sustituyendo:
<!-- People who want to hardcode their "Solr Home" directly into the
WAR File can set the JNDI property here...
-->
<!--
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
-->
por:
<!-- People who want to hardcode their "Solr Home" directly into the
WAR File can set the JNDI property here...
-->
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/home/xxxxxxx/solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
11) Arrancamos Tomcat y ya podríamos acceder a la página de inicio del portal, http://localhost:8080/solr/admin
Utilización de Solr
Una vez instalado Solr, podemos subir y buscar documentos fácilmente desde Java. Necesitaremos las librerías:
<dependencies>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-common</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
El código de la clase ejemplo sería:
import java.io.IOException;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
public class AppTest {
/**
* URL del servidor Solr
*/
private static final String URL_SOLR = "http://localhost:8080/solr";
public static void main (String args[]) throws SolrServerException, IOException {
//Conectamos con el servidor Solr
final CommonsHttpSolrServer serverSolr = new CommonsHttpSolrServer(URL_SOLR);
serverSolr.setParser(new XMLResponseParser());
//Creamos un par de documentos
creaDocQuijote(serverSolr);
creaDocBuscon(serverSolr);
//Buscamos documentos por nombre
buscaDocNombre(serverSolr, "hidalgo");
//Buscamos documentos por contenido
buscaDocContenido(serverSolr, "Mancha");
//Borramos todo el contenido del servidor (por aquello de dejarlo limpio y poder repetir las inserciones)
serverSolr.deleteByQuery("*:*");
}
private static void creaDocQuijote(final CommonsHttpSolrServer serverSolr) throws SolrServerException, IOException {
final SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "000001");
doc.addField("name", "El ingenioso hidalgo don Quijote.txt");
doc.addField("text", "En un lugar de la Mancha de cuyo nombre");
serverSolr.add(doc);
serverSolr.commit();
}
private static void creaDocBuscon(final CommonsHttpSolrServer serverSolr) throws SolrServerException, IOException {
final SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "000002");
doc.addField("name", "Buscón.txt");
doc.addField("text", "Yo, señora, soy de Segovia. Mi padre se llamó Clemente Pablo");
serverSolr.add(doc);
serverSolr.commit();
}
private static void buscaDocNombre(final CommonsHttpSolrServer serverSolr, final String nombre) throws SolrServerException{
final SolrQuery query = new SolrQuery();
query.setQuery("name:quijote.txt");
final QueryResponse rsp = serverSolr.query(query);
final SolrDocumentList docList = rsp.getResults();
System.out.println("Encontrados "+docList.size()+" documentos con el nombre '"+nombre+"'");
}
private static void buscaDocContenido(final CommonsHttpSolrServer serverSolr, final String contenido) throws SolrServerException {
final SolrQuery query = new SolrQuery();
query.setQuery("text:Mancha");
final QueryResponse rsp = serverSolr.query(query);
final SolrDocumentList docList = rsp.getResults();
System.out.println("Encontrados "+docList.size()+" documentos con el contenido '"+contenido+"'");
}
}
Enlaces de interés
http://stackoverflow.com/questions/10026014/apache-solr-configuration-with-tomcat-6-0
http://www.solrtutorial.com/
No hay comentarios:
Publicar un comentario