Tomáš Holý
21.12.2012

Fulltextové vyhledávání – výběr frameworku

Pokud řešíte v aplikaci vyhledávání textů, určitě časem narazíte na potřebu implementovat fulltextové vyhledávání a to především z důvodu rychlosti získávání výsledků. Použít fulltextové vyhledávání, to znamená implementovat způsob vyhledávání informací v databázích nebo textových souborech. Data pro takovéto vyhledávání jsou předpřipravena a uložena v indexech (obvykle jednotlivá slova), aby nalezení hledaného textu bylo co nejrychlejší. Jedním ze základních frameworků pro fulltextové vyhledávání je projekt Apache Lucene. Jedná se o open source implementaci vyhledávacího enginu. U jeho zrodu byl v roce 1999 Doug Cutting. Architektura Lucene je postavena na dokumentu obsahujícím textové položky, díky tomu je nezávislý na formátu dat. Dnes jsou Lucene nebo projekty, které jsou na něm postaveny, nejčastěji používanými vyhledávacími enginy v Java aplikacích. Zbývá tedy otázka jaký z projektů zvolit pro implementaci fulltextového vyhledávání. Použít přímo Apache Lucene (aktuálně ve verzi 4.0) má své výhody i nevýhody. Hlavní výhodou je, že existuje dobrá dokumentace a spousty předpřipravených implementací pro dosažení cíle. Nevýhodou je, že kvůli velké konfigurovatelnosti a rozšiřitelnosti je vytvoření jednoduchého řešení přeci jen složité, zvláště pro člověka bez zkušeností. V tuto chvíli přicházejí na řadu frameworky postavené právě nad Apache Lucene, z nichž některé si nyní představíme:

Compass

Počátek vývoje je datován do roku 2004, jedná se tedy o jeden z prvních kvalitních fulltextových frameworků na platformě Lucene. Poslední vydaná verze je 2.2 z roku 2010 a jeho další vývoj je zastaven.

+   integrace ORM frameworků
+   podpora Springu
+   distribuovatelnost indexů
-   zastavení vývoje


Solr

Samostatný enterprise vyhledávací server se servlet kontainerem, vyvíjený pod Apache 2.0 licencí. Přístup k datům je zajištěn pomocí jednoduchého REST API. Poskytuje velmi výkonný nástroj pro řešení fulltextového vyhledávání. Nevýhodou pro některé projekty může být to, že jde o samostatně běžící server a uživatel si musí sám řídit indexování dat.

+/- samostatně bežící fulltext server
+   přístup přes REST API (HTML, XML, JSON)
+   dobře zdokumentovaný (existují dvě knihy o Solr)
+   velmi výkonný s podporou široké konfigurovatelnosti
+ podpora statistik přes JMX
+ podpora replikace indexů
+ konfigurace Cache


Hibernate Search

Kombinuje výhody Hibernate Core a Apache Lucene, aby umožnil snadno implementovat fulltextové vyhledávání nad persistentní vrstvou.

+   práce přímo s doménovým modelem, odstínění indexu
+   automatická synchronizace databáze a indexu
+   konfigurace pomocí anotací
+   podpora Spring konfigurace
-   složitější vyhledávání nad více doménovými objekty
-   příliš svázané s Hibernate frameworkem


ElasticSearch

Jedná se o spojení NoSQL databáze a moderního vyhledávacího enginu postaveného na Lucene. Pro práci s daty se používá REST API s podporou formátu JSON. Za vývojem stojí tvůrce Compassu, jehož vývoj byl ukončen, a místo něj začal vznikat právě nový engine ElasticSearch.

+/- samostatně bežící fulltext server
+/- postaven nad NoSQL databázích
+   přístup přes REST API (JSON)
+   nevyžaduje žádnou datovou strukturu
+   dobrá podpora pro clusterové řešení

 

Který framework tedy použít pro implementaci vyhledávání? To není možné říci obecně. Každé řešení má svoje pro a proti a výběr toho správného záleží vždy na konkrétním projektu a na požadavcích pro vyhledávání. Pro náš projekt Orinoco jsme vybrali řešení založené na Hibernate Search. Vybrali jsme ho z několika důvodů:

  • pro práci s daty používáme Hibernate ORM
  • automatická synchronizace databáze a indexu nevyžaduje žádné zásahy do kódu
  • řešení nemusí běžet jako samostatný server

 

Složitost vyhledávání nad více doménovými objekty nám však způsobuje značné potíže, po zkušenostech s ním bych příště zřejmě volil spíš ElasticSearch. V dalším článku bych se již rád věnoval konkrétnímu řešení nad Hibernate Search. Zajímal by mě i Váš názor na fulltextové vyhledávání. Jaké řešení jste zvolili na svých projektech a jaké důvody Vás k tomu vedly?

Vaše emailová adresa nebude zveřejněna

Komentáře

Děkujeme za váš komentář
Další