Apache Lucene lucene.apache

12
Apache Lucene http://lucene.apache.org/ Biblioteka za pretragu informacija. Pretraga teksta, osnove API i primeri korišćenja

description

Apache Lucene http://lucene.apache.org/. Biblioteka za pretragu informacija. Pretraga teksta, osnove API i primeri korišćenja. Šta je Apache Lucene?. - PowerPoint PPT Presentation

Transcript of Apache Lucene lucene.apache

Page 1: Apache Lucene lucene.apache

Apache Lucenehttp://lucene.apache.org/

Biblioteka za pretragu informacija. Pretraga teksta, osnove API i primeri korišćenja

Page 2: Apache Lucene lucene.apache

Šta je Apache Lucene?

• Nije alat za pretragu, već biblioteka, API koji daje strukture podataka i procedure koje nam omogućavaju da u aplikaciju ugradimo funkcije pretrage (information retrieval - IR)

• Razvoj počeo oko 2000. godine (Doug Cutting), brzo stečena popularnost

• Trenutno u verziji 3.4. Najpopularnija Java biblioteka te namene. Brojni komercijalni i open-source projekti zasnovani na Lucene

• Postoje implementacije i u drugim jezicima (.NET, Ruby, Perl, Python, C++...)

Page 3: Apache Lucene lucene.apache

Indeksiranje

• Često slušamo o indeksima pri pretraživanju.

• Nije naročito zahtevno pretražiti sekvencijalno jedan dokument. Ako je broj veći, potrebna nam je pomoćna struktura - indeks.

• Indeksi na kraju knjiga beleže stranice gde se pojavljuju značajne reči i izrazi

• Indeks smanjuje obim pretrage i daje lokaciju traženih reči

Page 4: Apache Lucene lucene.apache

Lucene indeksi• Lucene indeks se čuva na fajl sistemu i sadrži

podatke bitne za pretragu dokumenata

• Klasa org.apache.lucene.document.Document predstavlja osnovnu jedinicu koja se analizira, smešta u indeks i pretražuje

• Jedan dokument može sadržati jedno ili više polja (org.apache.lucene.document.Field). Polja su svojstva dokumenta koja se pretražuju ili služe kao opisni podaci

• Upiti nalaze dokumente čija polja imaju određene vrednosti (slobodan tekst, brojevi, datumi...) ili su u nekom opsegu

• Analogija sa knjigom i traženjem pojma u indeksu: dokument je jedna stranica, polje je broj strane, kao i tekstualni sadržaj te strane (ali obrađen)

Page 5: Apache Lucene lucene.apache

Indeksiranje u praksi• Naše dokumente prevodimo u “sirovi tekst” - razne

biblioteke za parsiranje i izdvajanje teksta iz raznih formata

• Lucene tekst parsira, pretvara u tokene i analizira za indeksiranje (stop reči, svođenje reči na koren i druge operacije specifične za svaki jezik)

• Dokumentu pridružujemo kao polja druge relevantne informacije vezane za dokument (datum, neki identifikator...)

• Dokument se smešta u indeks

• Indeks može biti na fajl sistemu (FSDirectory) ili u RAM (RAMDirectory)

Page 6: Apache Lucene lucene.apache

Primer

• Pretražujemo HTML dokumente u nekom direktorijumu

• Jedan HTML fajl predstavljaće jedan Lucene dokument

• Polja: tekst (iz HTML BODY), naslov (TITLE) i putanja na fajl sistemu

• Pretražujemo po naslovu i po tekstualnom sadržaju.

• Rezultat vraća putanju i naslov

• Radimo sa dva indeksa - jedan je u RAM i služi kao bafer, drugi je na fajl sistemu i u njega na svakih 100 dokumenata ubacujemo (spajamo, merge u Lucene terminologiji) indeks koji je u RAM

Page 7: Apache Lucene lucene.apache

Šta radi Analyser?

• Zavisi koji (StandardAnalyser, StopAnalyser...). Postoje jednostavniji i složeniji.

• Uopšteno iz teksta dokumenta izdvaja tokene koje vredi indeksirati, ne ubacivati u indeks suvišne reči

• Npr. StandardAnalyser će leksičkom analizom izdvojiti pojedine reči, ukloniti stop reči engleskog jezika, prepoznati e-mail adrese, nazive kompanija, reči koje sadrže apostrofe, svodi reči na koren, osnovni oblik, uklanja akcente i svodi na mala slova... Radi i sa istočnim pismima (Kina, Japan, Koreja), a isprobano i sa domaćom latinicom i ćirilicom :)

• Sandbox projekti nude dodatne analizatore

• Kao i sve u vezi pretrage, izbor analizatora zavisi od konkretnih potreba

Page 8: Apache Lucene lucene.apache

Od tokena ka indeksu

• Tokeni odlaze u indeks i postaju Term - vrednosti na osnovu kojih se vraćaju rezultati pretrage

• Ne mora svako polje da bude analizirano - neka mogu da budu uneta sa tačnim vrednostima i da kao takva budu pretraživana

• Ako želimo da brzo rekonstruišemo indeksiranu vrednost, i vrednost je relativno mala, možemo je celu čuvati u indeksu. Npr. neki datum, naslov, ime fajla itd.

• Analizator može biti drugačiji od dodeljenog IndexWriteru za određeni dokument

Page 9: Apache Lucene lucene.apache

Upiti• Bogat Query API - jednakost, slilčnost, opsezi

vrednosti, wildcard

• Kombinovanje upita

• QueryParser: formira upit od unetog stringa

• IndexSearcher pretražuje indeks na zadati upit

• Collector i Hits objekti prikupljaju i rangiraju rezultate (ne cele dokumente, već samo interne id-eve dokumenata)

• Možemo dobiti dokument upitom nad indeksom koristeći id dokumenta

Page 10: Apache Lucene lucene.apache

Segmenti

• Dodavanje i brisanje dokumenata se vrši inkrementalno

• Jedan segment je grupa indeksiranih dokumenata

• Dokumenti se dodaju u tekući indeks i periodično spajaju sa drugim segmentima

• Optimizacije (broj segmenata, broj dokumenata po segmentu...)

• Spajanje više indeksa

Page 11: Apache Lucene lucene.apache

• Konkurentnost u pristupu: moguće je pretraživati indeks dok je u toku upisivanje

• Transakciono ponašanje

• Paralelni rad sa više indeksa (FS ili RAM)

• Optimizacija - brzina indeksiranja, brzina pretrage

• Prostor na disku i broj otvorenih fajlova

• Backup

Druga pitanja vezana za indeksiranje

Page 12: Apache Lucene lucene.apache

Najbolje da probate sami :)

• Par jar biblioteka (Lucene, nešto Apache Commons, neki parser za HTML, PDF, MS Word...)

• Gomila dokumenata

• Igrajte se

• Dosta tutoriala, primera, knjiga Lucene in Action...

• Probajte nešto od dodatnih biblioteka koje dolaze uz Lucene

• Probajte i druge stvari (solr server, Tika...)