RSS

Proyecto Java web con Apache Solr y Postgresql … parte 3

05 Jun

Utilizando SolrJ ……

Para utilizar SolrJ necesitamos definir en el classpath de la aplicación la referencia hacia los siguientes archivos jar:

De /dist:    apache-solr-solrj-*.jar De /dist/solrj-lib    commons-codec-1.3.jar
    commons-httpclient-3.1.jar
    commons-io-1.4.jar
    jcl-over-slf4j-1.5.5.jar
    slf4j-api-1.5.5.jar

De /lib

    slf4j-jdk14-1.5.5.jar


Nota. Es posible que se necesite agregar al classpath de la aplicación una versión más reciente de la clase HttpClient, la cuál se encuentra en el archivo httpcomponents-client-4.1.3

http://hc.apache.org/downloads.cgi

Una vez agregadas las bibliotecas necesarias se debe crear un proyecto.

Creando el proyecto …………

Creamos un proyecto en NetBeans llamado “LaboratorioFinalA”, en este proyecto solamente se hace un prueba de conexión a solr y la manera de obtener los datos.

En primer lugar es necesario definir una clase, que representa los registros en la base de datos, esto se
hace de la siguiente manera:

package laboratoriofinala;import java.util.List;
import org.apache.solr.client.solrj.beans.Field;public class Libro {   
     @Field("id")
    private Integer id;

    @Field("titulo")
    private String titulo;

    @Field("editorial")
    private String editorial;
   
    @Field("volumen")
    private String volumen;
   
    @Field("serie")
    private String serie;
   
    @Field("edicion")
    private String edicion;
   
    @Field("notas")
    private String notas;

    public final String getEdicion() {
        return edicion;
    }

    public final void setEdicion(String edicion) {
        this.edicion = edicion;
    }

    public final String getEditorial() {
        return editorial;
    }

    public final void setEditorial(String editorial) {
        this.editorial = editorial;
    }

    public final Integer getId() {
        return id;
    }

    public final void setId(Integer id) {
        this.id = id;
    }

    public final String getNotas() {
        return notas;
    }

    public final void setNotas(String notas) {
        this.notas = notas;
    }

    public final String getSerie() {
        return serie;
    }

    public final void setSerie(String serie) {
        this.serie = serie;
    }

    public final String getTitulo() {
        return titulo;
    }

    public final void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public final String getVolumen() {
        return volumen;
    }

    public final void setVolumen(String volumen) {
        this.volumen = volumen;
    }
}

Lo primero que se hace es crear una instancia del servidor Solr, después es necesario crear un objeto para especificar una consolta al servidor y por último se ejecuta la consulta para obtener el conjunto de los resultados y manejarlos como se necesita.

El siguiente código se debe incluir en la clase llamada “LaboratorioFinalA” :

package laboratoriofinala;import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;public class LaboratorioFinalA {
   
    public static void main(String[] args) throws SolrServerException {
        String url = "http://localhost:8983/solr/Libros";
        String ln = System.getProperty("line.separator");
        try {
            SolrServer server = new HttpSolrServer(url);
                SolrQuery query = new SolrQuery();
                query.setQuery( "*:*" );
               
                QueryResponse rsp = server.query( query );
               
                SolrDocumentList docs = rsp.getResults();
               
                List<Libro> beans = rsp.getBeans(Libro.class);
                StringBuilder sb = new StringBuilder();
               
                sb.append("Registros encontrados= "+docs.getNumFound());
                sb.append(ln).append(ln);
               
                for(Libro libro : beans){
                    sb.append("Id= ").append(libro.getId()).append(ln);
                    sb.append("Título= ").append(libro.getTitulo()).append(ln);
                    sb.append("Editorial= ").append(libro.getEditorial()).append(ln);
                    sb.append("volumen= ").append(libro.getVolumen()).append(ln);
                    sb.append("Serie= ").append(libro.getSerie()).append(ln);
                    sb.append("Edicion= ").append(libro.getEdicion()).append(ln);
                    sb.append("Notas= ").append(libro.getNotas()).append(ln).append(ln);
                }
                System.out.println(sb);             
        } catch (Exception ex) {
            Logger.getLogger(LaboratorioFinalA.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

En este ejemplo, la consulta es ” *:* “ en el lenguaje de búsqueda de solr esto significa buscar cualquier palabra en todos los campos, de manera que regresa el total de registros como el conjunto de resultados. En la siguiente figura se muestra el ejemplo de la ejecución del ejemplo:

Crear el servlet …………….

Crear un proyecto llamado “LaboratorioFinalB” formado por un servlet y una página jsp. El servlet recibirá una consulta (una palabra o frase) que pasará al servlet que realizará la busqueda utilizando el servidor Solr.

Utilizando el ejemplo anterior, utilizamos la misma configuración de solr.

Se debe incluir el classpath en el proyecto, como en el ejemplo anterior.

Se utiliza la clase Libro creada anteriormente, y agregamos un servlet llamado “Buscador” que tendrá el siguiente código:

package laboratoriofinalb;import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;@WebServlet(name = "Buscador", urlPatterns = {"/Buscador"})
public class Buscador extends HttpServlet {   
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            StringBuilder sb = buscar(request.getParameter("nombre").toString());
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Servlet_Hola</title>");           
            out.println("</head>");
            out.println("<body>");
            out.println("<strong>" + sb.toString() + "<strong>");
            out.println("</body>");
            out.println("</html>");
        } finally {           
            out.close();
        }
    }
   
    private StringBuilder buscar(String consulta){
        StringBuilder sb = new StringBuilder();
        String url = "http://localhost:8983/solr/Libros";
        String ln = "<br>";
        try {
            SolrServer server = new HttpSolrServer(url);
                SolrQuery query = new SolrQuery();
                query.setQuery( consulta );
                QueryResponse rsp = server.query( query );
                SolrDocumentList docs = rsp.getResults();
                List<Libro> beans = rsp.getBeans(Libro.class);
               
                sb.append("Registros encontrados= "+docs.getNumFound());
                sb.append(ln).append(ln);
               
                for(Libro libro : beans){
                    sb.append("Id= ").append(libro.getId()).append(ln);
                    sb.append("Título= ").append(libro.getTitulo()).append(ln);
                    sb.append("Editorial= ").append(libro.getEditorial()).append(ln);
                    sb.append("volumen= ").append(libro.getVolumen()).append(ln);
                    sb.append("Serie= ").append(libro.getSerie()).append(ln);
                    sb.append("Edicion= ").append(libro.getEdicion()).append(ln);
                    sb.append("Notas= ").append(libro.getNotas()).append(ln).append(ln);
                }
        } catch (Exception ex) {
            Logger.getLogger(Buscador.class.getName()).log(Level.SEVERE, null, ex);
        }
        return sb;
    }

           
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

En la página jsp solo se muestra una caja de texto para realizar la búsqueda en el servlet, el código es
el siguiente:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Buscador</h1>
        <br/><br/>
        <form action="Buscador" method="POST">
            Buscar información sobre:
            <input type="text" name="nombre" value="..." size="30" />
            <input type="submit" value="Enviar" name="Buscar" />
        </form>
    </body>
</html>

La siguiente imagen muestra la página jsp:

En la siguiente página se muestra el servlet:

.

 
Deja un comentario

Publicado por en 5 junio, 2012 en Apache Solr, Código, Java, Postgresql

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: