Diferencia entre revisiones de «Apache Lucene»

De Dos Ideas.
Saltar a: navegación, buscar
Línea 16: Línea 16:
 
Veremos un ejemplo sencillo para indexar el codigo, nombre y apellido de la tabla "invasores". Este ejemplo no está optimizado, tan solo sirve como presentación del API.
 
Veremos un ejemplo sencillo para indexar el codigo, nombre y apellido de la tabla "invasores". Este ejemplo no está optimizado, tan solo sirve como presentación del API.
  
<pre>
+
<code java>
 
  IndexWriter writer = new IndexWriter("d:\mi_indice", new StandardAnalyzer(), true);
 
  IndexWriter writer = new IndexWriter("d:\mi_indice", new StandardAnalyzer(), true);
 
  stm = conn.createStatement();
 
  stm = conn.createStatement();
Línea 36: Línea 36:
 
  writer.optimize();
 
  writer.optimize();
 
  writer.close();
 
  writer.close();
</pre>
+
</code>
  
 
===Buscando en el índice===
 
===Buscando en el índice===
Línea 46: Línea 46:
 
Este código no está optimizado, es tan sólo a modo de ejemplo. Por ejemplo, la clase =IndexSearcher debería ser única para toda la aplicación.
 
Este código no está optimizado, es tan sólo a modo de ejemplo. Por ejemplo, la clase =IndexSearcher debería ser única para toda la aplicación.
  
<pre>
+
<code java>
 
  String line = "invasor zim";  //este es el string que buscaremos.
 
  String line = "invasor zim";  //este es el string que buscaremos.
  
Línea 66: Línea 66:
 
     //hacer algo con los datos...
 
     //hacer algo con los datos...
 
  }
 
  }
</pre>
+
</code>
  
 
==Ver también==
 
==Ver también==

Revisión del 19:22 17 ago 2008

Apache Lucene es un motor de búsqueda de texto, escrito en Java. Lucene es una excelente opción para cualquier aplicación que requiera búsqueda de datos en texto.

Lucene cuenta con el motor de búsqueda y un indexador de datos.


Frameworks y herramientas relacionadas

Existen diversas herramientas relacionadas a Lucene

  • Luke Lucene Index Toolbox, una aplicación de escritorio para consultar y analizar índices.
  • Compass, un framework por sobre Lucene que facilita la indexación y el mapeo de objetos al índice.

Ejemplo

Indexando una tabla

Indexar una tabla con Lucene es un proceso relativamente sencillo. Involucra crear un objeto IndexWriter, ejecutar la consulta SQL, e ir creando objetos Document por cada fila retornada.

Veremos un ejemplo sencillo para indexar el codigo, nombre y apellido de la tabla "invasores". Este ejemplo no está optimizado, tan solo sirve como presentación del API.

IndexWriter writer = new IndexWriter("d:\mi_indice", new StandardAnalyzer(), true);
stm = conn.createStatement();
rs = stm.executeQuery("select cod_invasor, nombre, cargo from invasores");
for (int i=0; rs.next(); i++) {
    Document doc = new Document();
    String codInvasor = rs.getString(1);
    String nombre = rs.getString(2);
    String cargo = rs.getString(3);
    doc.add(new Field("codInvasor", codInvasor, Field.Store.YES, Field.Index.NO));
    doc.add(new Field("nombre", nombre, Field.Store.YES, Field.Index.TOKENIZED));
    doc.add(new Field("nombre", cargo, Field.Store.YES, Field.Index.TOKENIZED));
    writer.addDocument(doc);
}
writer.optimize();
writer.close();

Buscando en el índice

Una vez creado el índice, lo que querremos es realizar búsquedas sobre él. Existe un API de búsqueda, pero para el caso del ejemplo lo más práctico es usar una clase ya provista que se encarga de parsear un String y traducirlo en un Query de búsqueda.

Realizaremos el código necesario para buscar a Invasor Zim en la base de clientes. Por default, buscaremos sobre el campo "nombre".

Este código no está optimizado, es tan sólo a modo de ejemplo. Por ejemplo, la clase =IndexSearcher debería ser única para toda la aplicación.

String line = "invasor zim";  //este es el string que buscaremos.
=IndexSearcher searcher = new IndexSearcher("d:\mi_indice");
Analyzer analyzer = new StandardAnalyzer();
QueryParser parser = new QueryParser("nombre", analyzer);
Query query = parser.parse(line);
Hits hits = indexSearcher.search(query);
//y recorremos los resultados...
for (int i=0; i < hits.length() && i < 100; i++) {
    Document doc = hits.doc(i);
    String codInvasor = doc.get("codInvasor");
    String nombre = doc.get("nombre");
    String cargo = doc.get("cargo");
    //hacer algo con los datos...
}

Ver también