ubiquitour.com

Cómo indexar y buscar un PDF en Java con Lucene

Cómo indexar y buscar un PDF en Java con Lucene

Apache Lucene es una librería de motor de búsqueda de texto completo escrita en Java. Puede utilizar Lucene para indexar y buscar cualquier tipo de documento de texto. Para convertir un archivo de formato de documento portátil (PDF) en un formato de texto que puede índice de Lucene, puede utilizar la clase de código abierto de PDFBox que tiene métodos especiales específicamente para Lucene. Simplemente proporcione el nombre de archivo PDF a PDFBox y obtener un objeto de documento Lucene que puede ser añadido al índice y buscado al igual que cualquier archivo de texto.

Instrucciones

1 Seleccione un analizador de Lucene para crear el índice, por ejemplo "StandardAnalyzer". Crear un objeto "IndexWriter" para agregar nuevos elementos en el índice, por ejemplo:

IndexWriter myWriter = new IndexWriter ("índice", new StandardAnalyzer(), true);

2 Llamada "LucenePDFDocument" para obtener un objeto de documento Lucene de su archivo PDF. Otros campos claves para el objeto y añadir el objeto en el índice de Lucene. Por ejemplo:

Documento pdfDoc = LucenePDFDocument.getDoument(filename);

pdfDoc.add (nuevo campo ("título", pdf.getTitle(), Field.Store.YES, Field.Index.TOKENIZED));

pdfDoc.add (nuevo campo ("autor", pdf.getAuthor(), Field.Store.YES, Field.Index.TOKENIZED));

myWriter.addDocument(pdfDoc);

3 Utilice la clase de "Buscador" para buscar en el índice de Lucene. "Buscador" devuelve un objeto de "Hits" de Lucene con una lista de objetos "Hit". Por ejemplo:

Posicionamiento en buscadores miBusqueda = nuevo SearchEngine();

Llega a myHits = mySearch.performSearch(searchText);

System.out.println ("documentos conciliados:" + myHits.length());

4 Recorrer en iteración los objetos de "Hit" para obtener más información acerca de cada partido. Los objetos de "Golpe" se ordenan por relevancia a la búsqueda, y también se puede obtener la puntuación de búsqueda relativo con "getScore()." Por ejemplo:

Iterador < Hit > itr = myHits.iterator();

mientras (itr.hasNext()) {}

Golpe theHit = itr.next();

Documento theDoc = theHit.getDocument();

System.out.println(theDoc.get("title") + "-" + theHit.getScore());

}