Einführung in Lucene

Transcription

Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Einführung in Lucene
Dr. Christian Herta
April, 2009
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Outline
1
Lernziele - Inhalt
2
Übersicht
3
Indizierung mit Lucene
4
Suche mit Lucene
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Lernziele - Inhalt
Zweck von Lucene
Wesentliche Klassen von Lucene und ihr Zusammenspiel
Grundlegende Benutzung von Lucene zur Suche und
Indizierung
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Outline
1
Lernziele - Inhalt
2
Übersicht
3
Indizierung mit Lucene
4
Suche mit Lucene
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Was ist Lucene?
Information (Text) Retrieval Library für Suche und Indizierung
d.h. (JAVA)-API - kein Anwendungsprogramm
aber es gibt Anwendungen basierend auf Lucene, wie z.B. Solr,
nutch
kein Spidering und Dokumentenverarbeitung
Apache Jakarta Projekt
Apache Software License
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Outline
1
Lernziele - Inhalt
2
Übersicht
3
Indizierung mit Lucene
4
Suche mit Lucene
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Wichtigen Klassen für die Indizierung
IndexWriter
Directory
Analyzer
Document
Field
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
IndexWriter
Zentrale Komponente für die Indizierung
Schreibzugri (write access) auf den Index
Erzeugt neuen Index
Fügt Dokumente zum Index hinzu
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Directory
Repräsentiert die Lokalisierung (Speicherort) des Index
Abstrakte Klasse
Unterklassen sind als Implementierung bei Lucene dabei, wie:
FSDirectory: Speicherung des Indexes auf Festplatte
RAMDirectory: In Memory Repräsentation
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Analyzer
Vorverareitung des zu indizierenden Textes
Abstrakte Klasse
Etliche konkrete Implementationen in Lucene enthalten
Analyseschritte
Tokenisierung
Stemming
Beseitigung von Interpunktion und Sonderzeichen
Beseitigung von Stopwörtern
Sprachabhängig
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Initialisierung des IndexWriter
Listing 1: Initialisierung des IndexWriter
1
File f ;
2 // . . .
3
4
5
6
7
8
init
f
IndexWriter writer =
new I n d e x W r i t e r
(f ,
new S t a n d a r d A n a l y z e r ( ) ,
true , / / c r e a t e
I n d e x W r i t e r . M a x F i e l d s . UNLIMITED ) ;
9 //
last
parameter
sets
Dr. Christian Herta
the
maximum
Einführung in Lucene
field
lenght
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Document
Document ist die Entität, die indiziert und gefunden wird
Document ist in Felder strukturiert
Lucene indiziert Text
aber auch numerische Werte (ab Lucene 2.9 auch native
numerische Werte in NumericField )
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Field
Repräsentation der Felder des Document
Felder können verschiedene Eigenschaften haben
Indiziert
Analysiert (wie Tokenisiert)
Stored
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
(virtuelles) Dokument erzeugen
Listing 2: Dokument erzeugen und füllen
1
2
3
4
5
6
7
8
9
10
11
File f ;
. . . // i n i t i a l i z a t i o n o f f
Document doc = new Document ( ) ;
doc . add ( new F i e l d ( " c o n t e n t " ) ,
new F i l e R e a d e r ( f ) ,
F i e l d . S t o r e .NO,
F i e l d . I n d e x . ANALYZED ) ; ) ;
doc . add ( new F i e l d ( " f i l e n a m e " ) ,
f . getCanonicalPath () ,
F i e l d . S t o r e . YES ,
F i e l d . I n d e x .NOT_ANALYZED) ;
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Dokument zum Index hinzufügen
Listing 3: Dokumente indizieren
1 // f o r
2
3
4
all
Document
doc
..
w r i t e r . addDocument ( doc ) ;
..
5
6 //
7
writer
is
instance
writer . close ();
of
Dr. Christian Herta
IndexWriter
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Outline
1
Lernziele - Inhalt
2
Übersicht
3
Indizierung mit Lucene
4
Suche mit Lucene
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Wichtigen Klassen
IndexSearcher
Term
Query
TermQuery
TopDocs
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
IndexSearcher
Zentrale Komponente für den Zugri auf den Index bei der
Suche
Read-only Mode
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Term
Term
Paar
Feldname
Wert(Inhalt) des Feldes
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Query
Query ist abstrakte Klasse
Verschiedene konkrete Implementierungen
TermQuery
BooleanQuery
PhraseQuery
etc.
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
TopDocs
TopDocs ist Container für die Ergebnisse der Suche
Für die Ergebnisse erhält man
docID
Such-Score (oat)
Dr. Christian Herta
Einführung in Lucene
Lernziele - Inhalt
Übersicht
Indizierung mit Lucene
Suche mit Lucene
Code-Schnipsel: Suche mit Lucene
1
2
3
4
5
6
7
Listing 4: Wichtige Klassen für die Suche
IndexSearcher searcher =
new I n d e x S e a r c h e r ( "/tmp/ i n d e x " ) ;
Query q u e r y =
new TermQuery
( new Term ( " c o n t e n t s " , " Lucene " ) ) ;
TopDocs h i t s = s e a r c h e r . s e a r c h ( query , 1 0 ) ;
searcher . close ();
Dr. Christian Herta
Einführung in Lucene