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
Autor Apache Software Foundation
Pierwsze wydanie 2000
Aktualna wersja stabilna 8.7.0
(3 listopada 2020) [±]
Język programowania Java
System operacyjny Wieloplatformowy
Rodzaj biblioteka programistyczna (indeksowanie i wyszukiwanie danych tekstowych)
Licencja Apache 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). Obecnie istnieje zarówno 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].

HistoriaEdytuj

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łanieEdytuj

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 danychEdytuj

Ż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 danychEdytuj

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 danychEdytuj

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 LuceneEdytuj

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 jest 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 LuceneEdytuj

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]

UwagiEdytuj

  1. W przypadku Lucene'a „kompatybilność” oznacza możliwość odczytu i zapisu tzw. indeksu Lucene'a.
  2. W porównaniu działania klasy „MoreLikeThis” z miarami podobieństwa dokumentów opartymi na cytowaniu, takimi jak analiza bliskości cytowań, podejście Lucene zalecało głównie dokumenty o podobnych cechach konstrukcyjnych, lecz niekoniecznie pokrewnych treściowo. Podobieństwo dokumentów oparte na cytowaniach okazały się bardziej odpowiednie do rekomendowania dokumentów o szerszym zakresie, co oznacza, że te podejścia mogą być bardziej odpowiednie do generowania nieoczekiwanych rekomendacji, o ile dokumenty, które mają być rekomendowane, zawierają cytaty (referencje) w tekście[12].

PrzypisyEdytuj

  1. a b c d e f g h i McCandless, Michael, Erik Hatcher, i Otis Gospodnetic. Lucene in action, second edition. Covers Apache Lucene 3.0, Manning Publications Co., 2010.
  2. a b c d e Andrzej Białecki, Robert Muir, Grant Ingersoll: Apache lucene 4. T. SIGIR 2012 workshop on open source information retrieval. 2012. (ang.)
  3. Apache Lucene - Welcome to PyLucene, lucene.apache.org [dostęp 2019-10-23].
  4. Plucene - A Perl port of the Lucene search engine - metacpan.org, metacpan.org [dostęp 2019-10-23].
  5. Andreas Ronge, A JRuby wrapper for the Lucene Document Database. Contribute to andreasronge/lucene development by creating an account on GitHub, 15 listopada 2018 [dostęp 2019-10-23].
  6. CLucene - lightning fast C++ search engine, clucene.sourceforge.net [dostęp 2019-10-23].
  7. Pucene / Asapo, asapo.at [dostęp 2019-10-23].
  8. Apache Solr -, lucene.apache.org [dostęp 2019-10-23].
  9. a b c Dziennik zmian proj. Lucene (ang. Lucene Change Log), lucene.apache.org [dostęp 2019-12-05].
  10. Opis pakietu org.apache.lucene.queryparser.classic (dokumentacja API Lucene 8.3.0), JavaDoc, lucene.apache.org [dostęp 2019-12-06] (ang.).
  11. Opis klasy MoreLikeThis (Lucene 8.3.0 API), JavaDoc, lucene.apache.org [dostęp 2019-12-06] (ang.).
  12. M. Schwarzer, M. Schubotz, N. Meuschke, C. Breitinger, V. Markl, and B. Gipp, Evaluating Link-based Recommendations for Wikipedia, Proceedings of the 16th ACM/IEEE-CS Joint Conference on Digital Libraries (JCDL), New York, NY, USA, 2016, str. 191-200
  13. Ahmed Salama, Ahmed Samih, Amr Ramadan, i Karim M. Yousef. GNU/Linux Semantic Storage System
  14. Brian Goetz, The Lucene search engine: Powerful, flexible, and free, JavaWorld, 15 września 2000 [dostęp 2019-12-10] (ang.).
  15. Daniele Anzelmi i inni, Plagiarism Detection Based on SCAM Algorithm [dostęp 2019-12-07].
  16. J. Beel, S. Langer, and B. Gipp, “The Architecture and Datasets of Docear’s Research Paper Recommender System,” in Proceedings of the 3rd International Workshop on Mining Scientific Publications (WOSP 2014) at the ACM/IEEE Joint Conference on Digital Libraries (JCDL 2014), London, UK, 2014
  17. Zakir Laliwala i Abdulbasit Shaikh, Web Crawling and Data Mining with Apache Nutch, Packt Publishing, 2013.
  18. a b c d PoweredBy - Apache Lucene (Java) - Apache Software Foundation, cwiki.apache.org [dostęp 2019-12-04].
  19. DocFetcher - Fast Document Search, docfetcher.sourceforge.net [dostęp 2019-12-03].
  20. Marcin Bajer, Building an IoT Data Hub with Elasticsearch, Logstash and Kibana, „5th International Conference on Future Internet of Things and Cloud / Workshops”, 2017.