Programování

Úvod do režimu spánku

Existuje mnoho webových aplikací, které poskytují přístup k velkému množství dat uložených v relační databázi, ale jaký je nejjednodušší způsob, jak uživatelům umožnit prohledávat tato data a najít to, co potřebují? V tomto článku Dr. Xinyu Liu představuje Hibernate Search, který integruje sofistikované vyhledávací schopnosti Lucene se známým rámcem objektově-relačního mapování Hibernate.

Apache Lucene je vysoce výkonná rozšiřitelná fulltextová knihovna vyhledávače napsaná v jazyce Java. Zpočátku nemusí být zřejmé, proč byste takovou věc potřebovali - koneckonců, vaše data jsou pěkně uložena v slušné relační databázi. Zatímco RDBMS může dělat skvělou práci při poskytování transakčních operací CRUD na datech uložených v relačním modelu, vyhledávací funkce definované v SQL nejsou vždy schopné splnit funkční i nefunkční požadavky vašich projektů. Existuje řada typů dotazů, které RDBMS obecně nepodporují bez rozšíření dodavatele:

  • Fuzzy dotazy, ve kterých se „fuzzy“ a „wuzzy“ považují za shody
  • Dotazy vyplývající ze slov, které považují „vzít“, „vzít“ a „vzít“ za identické
  • Zvukové dotazy, které považují „kočka“ a „kat“ za totožné
  • Synonymní dotazy, které považují výrazy „jump“, „hop“ a „leap“ za identické
  • Dotazy na binární datové typy BLOB, jako jsou dokumenty PDF, dokumenty Microsoft Word nebo Excel nebo dokumenty HTML a XML

Více zklamáním je, že výsledky vyhledávání SQL nejsou seřazeny podle skóre relevance shody. Standard SQL jednoduše není určen pro fulltextové dotazování.

Možnosti vyhledávání v Lucene jsou naproti tomu neomezené. Lucene zpracovává všechny právě zmíněné dotazy a další; umožňuje vám také vyhledat textové dokumenty podobné ostatním dokumentům pomocí pokročilého dotazu na výrazy a vektory. Můžete například prohledat obsah řady knih a najít knihu s obsahem podobným té z Hibernace v akci. Architektura analyzátoru v Lucene využívá vestavěné možnosti internacionalizace a lokalizace Java, díky nimž je k dispozici fulltextový dotaz pro různé jazyky po celém světě. Lucene poskytuje vynikající výkon prostřednictvím některých inovativních technik, jako je například obrácený index. Web Apache Lucene obsahuje seznam výkonnostních měřítek, které ukazují, jak dobře Lucene funguje a škáluje.

Všimněte si, že někteří prodejci databází implementují funkce fulltextového vyhledávání ve svých produktech jako rozšíření SQL. Do jisté míry jsou tyto patentované funkce poměrně snadno použitelné, ale narušují přenositelnost vašich aplikací na úrovni databáze. Kromě toho tyto funkce neodpovídají uživatelskému zážitku, který Lucene nabízí, a za extrémních podmínek je výkon Lucene vynikající.

Hibernace a rozhraní Java Persistence API

Hibernate je vysoce výkonná a vyspělá knihovna objektově-relačních mapování (ORM). Jako neintruzivní řešení ORM poskytuje Hibernate rozhraní API pro dotazy na objekty pro jednoduché modely modelu perzistence starých objektů Java (POJO) a automatické datové vazby mezi objektem a relačními reprezentacemi dat perzistence. V podstatě vám umožní zaměřit se na programování orientované na model domény.

Java Persistence API (JPA) je standardní rozhraní pro objektové relační mapování a správu persistence definované jako součást Java EE 5, nejnovější verze podnikové specifikace Java. Inspirován Hibernate, se objevil JPA, který nahradil kontroverzní model programování fazole entity. JPA má snadno použitelný styl programování POJO a rozhraní pro dotazy na objekty (JPAQL); jedním vylepšením JPA oproti entitám fazolí je, že nepotřebujete kontejner EJB 3 ke spouštění aplikací, které používají API, protože podporuje jak samostatné režimy (Java SE), tak i kontejnery (Java EE). Mezi oblíbené poskytovatele JPA patří Apache OpenJPA a Oracle TopLink, stejně jako samotný Hibernate, který implementuje specifikaci JPA prostřednictvím doplňkových Hibernate Annotations a Hibernate EntityManager modulů. V tomto článku použiji JPA / Hibernace jako zkratka pro ty dva, kteří pracují společně.

Tento článek vám představí technologii Hibernate Search prostřednictvím ukázkové aplikace naprogramované ve stylu POJO s nejnovějšími anotacemi Spring 2.5. Než začnete, měli byste mít základní znalosti Spring, Hibernate / JPA a Lucene.