Apache Lucene

Apache Luceneotwartoźródłowa biblioteka programistyczna oferująca funkcje wyszukiwania informacji (ang. information retrieval)[1]. Pozwala zarówno na zbieranie, indeksowanie oraz wyszukiwanie tekstu, co umożliwia stosunkowo proste dodanie funkcji wyszukiwania tekstu do istniejących serwisów jak i budowanie nowych serwisów wyszukiwania informacji (w tym wyszukiwarek internetowych). Jest rozwijana przez Apache Software Foundation i wydana na licencji Apache Software License[2].

Lucene
Logo Lucene
Logo programu
AutorApache Software Foundation
Pierwsze wydanie2000
Aktualna wersja stabilna9.10.0
(20 lutego 2024) [±]
Język programowaniaJava
System operacyjnyWieloplatformowy
Rodzajbiblioteka programistyczna (indeksowanie i wyszukiwanie danych tekstowych)
LicencjaApache License
Strona internetowa

Biblioteka Apache Lucene jest napisana w języku Java i oferuje API z poziomu Javy (stąd pozwalała na integrację z aplikacjami Javowymi). Istnieje jednak szereg tzw. „wrapperów” dla innych języków, m.in. dla Pythona (projekt PyLucene[3] – część projektu Apache Lucene), dla Perla (projekt plucene[4]) czy dla jęz. Ruby (projekt Lucene.rb[5]). Istnieją również tzw. „porty” – wersje stworzone niezależnie od implementacji oryginalnej napisane od początku w innych językach programowania a będące z nią kompatybilne[a] (należą do nich m.in. Clucene[6] napisany w jęz. C++ oraz pucene[7] napisany w jęz. PHP).

Częścią projektu jest narzędzie Solr, które pozwala zbudować wyszukiwarki bez wykorzystania API z języków programowania[8].

Historia

Projekt Lucene został zapoczątkowany przez Douga Cuttinga w roku 1997 jako własny projekt (który – jak przyznaje autor – miał na celu samodoskonalenie się w jęz. Java[1][2]). Projekt został opublikowany jako otwarte oprogramowanie w roku 2000 (wersja 0.01)[9]. Następnie, w połowie roku 2001, biblioteka została przekazana Apache Software Foundation (ASF)[2]. Pierwszym oficjalnym wydaniem ASF była wersja 1.2, opublikowana w październiku 2001[9]. Od tego czasu wydano kilka „dużych” wersji (wer. 2 – w roku 2006, wer. 3 – 2010, wer. 4 – 2012, wer. 5 – 2015, wer. 6 – 2016, wer. 7 – 2017 i wer. 8 – 2019[1][9]). Obecnie biblioteka Lucene (napisana w Javie) jest jedną z części projektu Lucene i jest nazywana Lucene-core. Innymi częściami projektu Lucene są, wspomniane wyżej, narzędzia Apache Solr oraz PyLucene.

Cechy i działanie

W systemie Lucene kluczowym i niepodzielnym elementem jest tzw. dokument. W dokumentach wyróżnia się części zwane polami, które służą do ustrukturyzowania dokumentów (polem może być np. tytuł dokumentu lub data jego powstania). Na podstawie dokumentów tworzony jest tzw. indeks Lucene'a, czyli struktura danych umożliwiająca wyszukiwanie danych.

Indeksowanie danych

Żeby być w stanie wyszukiwać dane, biblioteka Lucene musi najpierw dokonać tzw. „indeksowania dokumentów”. To użytkownik biblioteki (używając API) wskazuje dokumenty do zindeksowania oraz pola, które będą podlegały indeksacji (pozostałe pola nie będą mogły posłużyć do wyszukiwania danych). Ponieważ dane dostarczane do systemu Lucene muszą mieć zawsze formę dokumentów w sensie Lucene'a (z co najmniej jednym polem), w wielu przypadkach istniejące materiały przed zindeksowaniem należy odpowiednio dostosować – m.in. wyodrębniając tekst z dokumentu binarnego i nadając mu formę dokumentu Lucene'owego. Dopiero po poprawnym zindeksowaniu można wyszukiwać dokumenty[1].

Wyszukiwanie danych

Możliwość wyszukiwania danych pojawia się natychmiast po ich zindeksowaniu. Lucene pozwala na wyszukiwanie dokumentów zarówno na podstawie pojedynczych słów jak i ich fragmentów. Budując zapytania dopuszczalne jest używanie różnego rodzaju symboli wieloznacznych (ang. wildcards) oraz używanie operatorów logicznych. Zwrócone wyniki mogą być posortowane według wybranych kryteriów[1][2].

Lucene zawiera funkcje wyszukiwania rozmytego, które mogą być realizowane z użyciem różnych technik, m.in. obliczania tzw. odległości Levenshteina między terminami[2][10]. Stąd można wyszukiwać informacje również z użyciem częściowo błędnych/niepoprawnych zapytań, m.in. z błędów wynikających z niepoprawnego zapisu brzmieniowego danego słowa (ang. sounds-like querying[1]). Ponadto, Lucene pozwala użyć istniejących wyników zapytań do kolejnych wyszukiwań (przykładem jest tu klasa „MoreLikeThis” z biblioteki Lucene, która zwraca dokumenty o podobnej strukturze dokumentów[11][b]).

Lucene a relacyjne bazy danych

Lucene różni się od relacyjnych baz danych tym, że nie wymaga zdefiniowania odpowiednika tzw. schematu bazy danych. W systemie Lucene możliwe jest indeksowanie dokumentów o różnej strukturze (w skrajnym przypadku każdy z dokumentów może mieć niepowtarzalną strukturę). W praktyce, indeksowane dokumenty mają często zbliżoną bądź identyczną strukturę, co pozwala na budowanie algorytmów przeszukiwania według znanego zestawu kluczy (pól)[1]. Inną cechą biblioteki Lucene jest to, że zindeksowanie określonych pól niekoniecznie musi pociągać zarazem zapisanie do bazy danych ich oryginalnej treści. Stąd możliwe jest wyszukiwanie dokumentów z użyciem pól, których treści nie będzie można wyświetlić, bo nie będzie w systemie zapisana (takie podejście nie występuje w tradycyjnych bazach danych)[1].

Zastosowania biblioteki Lucene

Naturalnym zastosowaniem biblioteki Lucene jest jej wykorzystanie w budowaniu wyszukiwarek internetowych jak również – podobnych w swoim sposobie działania – funkcji wyszukiwania danych w ramach pojedynczej witryny internetowej czy też korporacyjnych systemów gromadzenia i wyszukiwania wiedzy[1][13]. Z racji swojego niewielkiego rozmiaru, Lucene może być wykorzystany jako jedna z bibliotek pomocniczych przez programy zainstalowane na komputerze użytkownika, m.in. w celu wyszukiwania informacji w e-mailach, materiałach i dokumentach zgromadzonych na dysku czy też w newsach i czasopismach, których użytkownik nie może lub nie chce przeglądać samodzielnie w całości[14]. Wbudowane funkcje wykrywania podobieństw między dokumentami mogą posłużyć do budowy systemów wykrywających plagiaty[15]. Lucene wykazała również swoją użyteczność przy budowaniu systemów rekomendacji[16].

Projekty używające biblioteki Lucene

Sama Lucene jest tylko biblioteką indeksowania i wyszukiwania i nie zawiera funkcji indeksowania, analizy HTML czy innych funkcji wykraczających poza podstawowe możliwości. Stąd można wskazać wiele serwisów i aplikacji (w tym innych projektów otwartoźródłowych), które używają Lucene. Należą do nich m.in.:

  • Apache Nutchrobot internetowy (narzędzie do indeksowania i analizy stron internetowych)[17][18]
  • CiteSeerX – serwis indeksujący i wyszukujący prace naukowe[18]
  • DocFetcher – wieloplatformowa aplikacja do wyszukiwania informacji zgromadzonych na komputerze lokalnym[19]
  • Eclipse – wieloplatformowe IDE (Lucene użyte jako silnik przeszukiwania dokumentacji)[18]
  • Elasticsearch – serwer indeksowania i wyszukiwania korporacyjnego (Lucene jest tu podstawową biblioteką usługi indeksowania/wyszukiwania)[20]
  • JIRA – narzędzie do zarządzania zadaniami i błędami zgłaszanymi w projektach informatycznych (Lucene tu jest wyszukiwarką błędów na podstawie ich opisu)[18]

Uwagi

Przypisy