Hibernate keresés

A Wikipédiából, a szabad enciklopédiából
(Hibernate search szócikkből átirányítva)
Ugrás a navigációhoz Ugrás a kereséshez

A Hibernate Search hozzáférést biztosít a relációs adatbázisokban tárolt adathoz, továbbá biztosítja a felhasználók számára az adatok könnyen kereshetőséget azáltal, hogy ötvözi a Hibernate objektum-reláció leképező keretrendszert a kifinomult Apache Lucene keresési lehetőségeivel. Ez utóbbi egy nagy teljesítményű, kiterjeszthető, teljes-szöveg keresőmotor könyvtár, melyet Java nyelven implementáltak.

A Hibernate Searchre akkor van szükség, ha az adataink relációs adatbázisban rendelkezésre állnak ugyan, de bonyolult teljes szöveges keresésre van szükségünk, akár több mezőben is egyszerre különböző illesztési szabályok szerint. Míg az RDBMS jól működik átviteli CRUD műveletek végrehajtásával a tárolt adaton a relációs modellben, addig az SQL-ben definiált kereső függvények nem mindig képesek az adott projekt funkcionális ill. nem funkcionális szükségleteit egyaránt kielégíteni. Létezik számos olyan lekérdezési típus, amelyet RDBMS általában nem támogat gyártói kiterjesztések nélkül. Pl.:

  • Fuzzy lekérdezések, amelyekben a „fuzzy” és „wuzzy” egyezésnek tekintendő
  • Szó eredő lekérdezések, amelyek azonosnak tekintik az „ás ”, „ásott” és „ásni fog” szavakat
  • Hangzás alapján történő lekérdezések, amelyek „macska” és „csacska” párost azonosnak tekintik
  • Szinonima lekérdezések, „ugrik” és „szökken” szavakat azonosnak tekintik
  • Bináris BLOB adattípusokon történő lekérdezések, mint PDF dokumentumok, Microsoft Word vagy Excel dokumentumok, vagy HTML és XML dokumentumok

Az SQL lekérdezések eredménye nem rendezhetők egyezés szerinti "eredményük" alapján sorrendbe. Az SQL szabványt egyszerűen nincs felkészítve a szabad-szöveges lekérdezésekre.

Ehhez képest a Lucene keresési lehetőségei korlátlanok. A Lucene az imént említett lekérdezéseket mind kezelni tudja, továbbá lehetővé teszi pl. hogy hasonlónak találjunk szöveges fájlokat más szöveges fájlokhoz. Ezt a továbbfejlesztett szó-vektor lekérdezései segítségével éri el. A Lucene analizáló architektúrája befolyásolja a Java beépített nemzetközi és lokalizációs képességeit, amelyek a teljes-szöveg lekérdezéseket elérhetővé teszik különböző nyelveken világszerte. A Lucene kiváló teljesítményt nyújt néhány innovatív technikának köszönhetően, mint amilyen például a fordított index. Az Apache Lucene Weboldal tulajdonságok egy teljesítménymutatókból álló lista, amely megmutatja milyen jól teljesít a Lucene.

Megjegyezendő, hogy az adatbázis gyártók a teljes-szöveg keresés funkcióit az SQL kiterjesztésekként implementálják. Valamilyen fokig ezeket a funkciókat nagyon könnyű használni, de mindez korlátozást is jelent az adott alkalmazás hordozhatóságát illetően, továbbá a funkciók többé nem a Lucene által kínált felhasználói élményért felelősek.

Hibernate és Java Perzisztencia API[szerkesztés]

A Hibernate egy nagy teljesítményű, érett objektum-reláció leképező (ORM) könyvtár. Mint egy nem tolakodó ORM megoldás, Hibernate objektum lekérdező API-kat nyújt a tiszta jó öreg Java objektumok (POJO) perzisztencia modell osztályai, és az objektum és relációs reprezentációja közötti automatikus adat kötések számára. Lényegében, lehetővé teszi, hogy a domain modell-orientált programozásra összpontosítsunk.

A Java Perzisztencia API (JPA) egy sztenderd objektum-reláció leképezés és perzisztencia kezelő interfész, amelyet a Java EE 5-nek részeként definiáltak. A Hibernate által inspirálva, a JPA-ból kikerült a vitatott entitás bab programozási modell. A JPA könnyen használható POJO programozási stílussal és objektum lekérdező interfésszel (JPAQL) rendelkezik; a JPA egyik előnye az entitás babokkal szemben, hogy nincs szükség EJB 3 konténerre, hogy futtassuk az API-t, mert támogatja mint az önálló (Java SE) mint a konténer-vezérelt (Java EE) futtatási módokat. Népszerű JPA szolgáltatók (pl. : Apache OpenJPA és Oracle TopLink), mint a Hibernate is, a JPA specifikációkat Hibernate Annotációk és Hibernate entitás kezelők segítésével implementálják.

Források[szerkesztés]