Come indice e cerca un PDF in Java con Lucene

August 3

Come indice e cerca un PDF in Java con Lucene


Apache Lucene è una libreria motore di ricerca a testo completo scritto in Java. È possibile utilizzare Lucene per indicizzare e ricercare qualsiasi tipo di documento di testo. Per convertire un file Portable Document Format (PDF) file in un formato di testo che Lucene può indice, è possibile utilizzare la classe di origine aperta PDFBox che ha metodi speciali appositamente per Lucene. Basta fornire il nome del file PDF per PDFBox e ottenere un oggetto Document Lucene che può essere aggiunto all'indice e cercato come qualsiasi file di testo.

istruzione

1 Selezionare un analizzatore di Lucene da utilizzare nella creazione dell'indice, ad esempio "StandardAnalyzer." Creare un oggetto "IndexWriter" per gestire l'aggiunta di nuovi elementi per l'indice, per esempio:

IndexWriter myWriter = new IndexWriter ( "indice", nuova StandardAnalyzer (), true);

2 Call "LucenePDFDocument" per ottenere un oggetto Document Lucene del file PDF. Aggiungere altri campi chiave per l'oggetto e aggiungere l'oggetto al di Lucene. Per esempio:

PDFDoc Document = LucenePDFDocument.getDoument (nome del file);

pdfDoc.add (nuovo campo ( "titolo", pdf.getTitle (), Field.Store.YES, Field.Index.TOKENIZED));

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

myWriter.addDocument (PDFDoc);

3 Utilizzare la classe "SearchEngine" per cercare di Lucene. "SearchEngine" restituisce un Lucene "Hits" oggetto con una lista di oggetti "hit". Per esempio:

SearchEngine MySearch = new SearchEngine ();

Hits myHits = mySearch.performSearch (Testo di ricerca);

System.out.println ( "Documenti trovati:" + myHits.length ());

4 Scorrere gli oggetti "colpo" per avere maggiori informazioni su ogni partita. Gli oggetti "colpo" sono ordinate per rilevanza per la ricerca, e si può anche ottenere il relativo punteggio di ricerca con "getScore ()." Per esempio:

Iterator <Hit> ITR = myHits.iterator ();

while (itr.hasNext ()) {

Hit theHit = itr.next ();

Documento theDoc = theHit.getDocument ();

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

}