Esta es la continuación de un post empezado hace mucho tiempo
La búsqueda de documentos constituye la funcionalidad principal proporcionada por Lucene. Para ello aporta múltiples clases y métodos para la representación de consultas y buscar en el índice aquellos documentos que son relevantes y cumplen con los criterios de la búsqueda. El programa que se muestra a continuación Buscador.java, es un ejemplo de cómo buscar en un índice utilizando Lucene.
Aquí dejo el codigo: http://pastebin.com/VshxtfwR
Estas son las clases más comunes durante el proceso de búsqueda:
– IndexSeacher:
Es el corazón del proceso de búsqueda a través del cual se pueden realizar consultas (Query) que devuelven resultados (TopDocs).
– Query:
Es una clase abstracta que permite definir la consulta sobre la que queremos realizar la búsqueda. Nos permite buscar consultando los Field.
– TopDocs
:
Contiene los resultados que cumplen las condiciones de la búsqueda.
Las tres clases más importantes que proporcionan métodos relacionados con la búsqueda de documentos indexados son Search, Query y Topdocs(con sus respectivas subclases).
La clase Buscador.java constituye la base para cualquier búsqueda en un índice de documentos. Para poder utilizar este ejemplo debemos crearnos una clase como explicamos anteriormente
En Buscador.java, se crea un objeto de de tipo IndexSearcher, pasando al constructor un único parámetro, el directorio dónde se encuentra el índice de documentos. El método más importante de esta clase es el método search(), que devuelve todos aquellos documentos que cumplen con las condiciones de la búsqueda.
La clase Query, junto con su clase hija QueryParser son las más importantes, ya que en ella se analiza gramaticalmente la consulta con el método parse(). Para crear el objeto de tipo QueryParse, partimos del campo en el que deseamos buscar dentro del índice y del analizador gramatical.
Más adelante aplicamos el método parse() a la consulta obteniendo un objeto de tipo Query, que es el que debemos usar en la búsqueda.
Una vez que se obtiene una Query, se le pasa como argumento al método search(), y se realiza la búsqueda. El método search() devuelve un objeto de tipo TopDocs, que representa una colección ordenada de documentos. El orden se determina por la relevancia de la Query en cada documento.
De esta manera se obtienen en primer lugar aquellos documentos que se ajustan a las expectativas de la búsqueda.
Conclusión
Para terminar cabe destacar que Lucene es mucho más de lo que se ve en este tutorial introductorio, si tienes inquietud de aprender más o necesitas más información puedes dirigirte al web oficial del proyecto Lucene (http://lucene.apache.org/) o también en el libro Lucene In Action second edition.
Referencias y bibliografía
[2] Lucene in Action. Second Edition. Michael McCandless, Erik Hatcher, Otis Gospodnetic
[3] http://trevinca.ei.uvigo.es/~pcuesta/sm/practicas/Lucene.pdf