Hibernate Search. Skuteczne wyszukiwanie (2).pdf

(2455 KB) Pobierz
O autorze
Steve Perkins mieszka w Atlancie (Georgia) w Stanach
Zjednoczonych. Jest programistą Javy z piętnastoletnim stażem.
Tworzy aplikacje internetowe oraz zajmuje się integracją systemów.
Realizował projekty dla klientów zarówno z branży handlowej,
rozrywkowej, mediów, jak i dla sektora finansowego. Używa
Hibernate od ponad siedmiu lat. Poza tym interesuje się najlepszymi
praktykami w modelowaniu struktur danych oraz projektowaniu
aplikacji.
Oprócz kodowania Steve’a interesuje również zagadnienie patentów
na oprogramowanie. Ukończył studia prawnicze i uzyskał licencję
adwokacką. Jest współautorem dwóch pozycji wydanych przez
Practicing Law Institute: In the Aftermath of In re Bilski (2009) oraz
In the Aftermath of Bilski v. Kappos (2010).
Steve mieszka w Atlancie z żoną Amandą, synem Andrew oraz tak
wieloma instrumentami muzycznymi, że brakuje mu czasu, by na nich
wszystkich grać. Jeśli chcesz, możesz odwiedzić jego stronę
internetową http://steveperkins.net/ lub śledzić go na Twitterze na
profilu @stevedperkins.
Dedykuję tę pracę mojej żonie Amandzie. Dziękuję za wsparcie
podczas jednoczesnego pisania książki oraz wychowywania
naszego nowo narodzonego dziecka. Jesteśmy wdzięczni rodzinie i
przyjaciołom za zachętę i wsparcie.
Dziękuję recenzentom oraz edytorom z Packt Publishing. Na
koniec pragnę wyrazić wdzięczność wobec każdego kierownika
działu HR, który zaryzykował i zdecydował się mnie zatrudnić.
Gdybym nie był rzucany na głęboką wodę, nie miałbym teraz o
czym pisać.
O recenzentach
Shaozhuang Liu ma ponad siedem lat doświadczenia w
programowaniu w Javie EE. Obecnie jako starszy członek zespołu
programistów projektu Hibernate koncentruje się na otwartym
projekcie Hibernate ORM. Oprócz tego zajmuje się budowaniem
ciekawych urządzeń na bazie otwartego sprzętu komputerowego,
takiego jak Arduino lub Raspberry Pi. Gdy nie programuje, zajmuje
się podróżowaniem lub snowboardingiem.
Murat Yener zdobył tytuły licencjata i magistra na Istanbul
Technical University. Brał udział w kilku projektach stosowanych do
dzisiaj w Instytucie Informatyki na ITU. Uczestniczył jako
programista Javy EE w tworzeniu systemu rozliczeniowego dla
IsBanku. Zaprojektował i zaimplementował kilka projektów
używanych do dzisiaj przez Muse Systems. Pracował jako
programista Javy EE oraz Flex dla TAV Airports Information
Technologies. Był liderem projektu w HSBC, odpowiedzialnym za
procesy biznesowe oraz interfejsy użytkownika bogatych aplikacji
klienckich (ang. rich client applications). Obecnie pracuje na
stanowisku Głównego Mentora w Eteration A.S. Zajmuje się m.in.
rozwojem projektów Eclipse Libra Tools, GWT oraz tworzeniem
aplikacji mobilnych na platformy Android oraz iOS.
Od 2009 roku przewodzi stambulskiemu stowarzyszeniu Google
Technology User Group. Regularnie wygłasza prezentacje na
konferencjach, takich jak JavaOne, EclipseCon, EclipsIst oraz na
spotkaniach GDG.
Chciałbym podziękować Naci Dai za bycie moim mentorem oraz
zapewnienie mi komfortowego środowiska do pracy, Danielowi
Kurka za napisanie mgwt, najlepszej platformy mobilnej, na jakiej
miałem okazję pracować, oraz Nilay Coskun za wsparcie.
Przedmowa
Ostatnie dziesięciolecie przyniosło wiele zmian dla twórców
wyszukiwarek. Przywykliśmy do tego, że narzędzia aktywnie
wspomagają nas w poszukiwaniu informacji. Proste zabiegi, takie jak
wyszukiwanie bez uwzględnienia pisowni wielkich liter, traktowanie
słów kluczowych jako części wyszukiwanych wyrazów lub inne
podstawowe sztuczki języka SQL, przestały nam już wystarczać.
Obecnie przeszukując bazę produktów, oczekujemy, że wpisane
słowa kluczowe zostaną odnalezione we wszystkich dostępnych
zbiorach danych. Niezależnie od tego, czy wprowadzona wartość
pasuje do numeru katalogowego komputera, czy do indeksu ISBN
książki, powinniśmy otrzymać wszystkie pasujące wyniki. Co więcej,
będą one posortowane w taki sposób, by na pierwszych miejscach
znalazły się te, które najbardziej odpowiadają naszym oczekiwaniom.
Wyszukiwanie powinno zostać przeprowadzone po przetworzeniu
słów kluczowych i powiązaniu ich z pokrewnymi wyrazami. Załóżmy,
że poszukujemy wyników na podstawie słowa kluczowego
„programowanie”. W takiej sytuacji wyszukiwanie powinno zostać
przeprowadzone również na podstawie powiązanego słowa
„programista”.
Najważniejszą cechą dobrej wyszukiwarki jest tolerancja błędów
użytkownika. Jeżeli np. zdarzy się nam literówka, pisownia powinna
zostać automatycznie skorygowana, a wyszukiwanie
przeprowadzone na podstawie poprawionych słów kluczowych.
Najprzyjemniej zaskakują użytkownika te wyszukiwarki, które
sprawiają wrażenie, że domyślają się lepiej od niego, czego tak
naprawdę szuka.
Celem tej książki jest zaprezentowanie Hibernate Search, biblioteki
dodającej nowoczesne mechanizmy wyszukiwania dla aplikacji.
Ponieważ programiści zazwyczaj najlepiej przyswajają nowe
informacje w trakcie przeglądania kodu źródłowego, w publikacji
operujemy na przykładowej aplikacji. Będziemy rozszerzać jej
możliwości, implementując zagadnienia omawiane w kolejnych
rozdziałach książki.
Czym jest Hibernate Search?
Mechanizmem odpowiadającym za funkcjonalność wyszukiwania jest
Apache Lucene, otwarta biblioteka służąca do indeksowania i
przeszukiwania zbiorów danych. Lucene to dojrzały projekt,
pomyślnie portowany na wiele języków programowania oraz mający
bogatą historię rozwoju. Został wdrożony w wielu gałęziach
przemysłu, np. przez takie przedsiębiorstwa jak Disney czy Twitter.
Lucene jest często omawiany wspólnie z powiązanym projektem —
Apache Solr. Z jednej strony Solr to opierający się na Lucene,
samodzielny serwer udostępniający usługę wyszukiwania. Z drugiej
strony komponenty tego projektu często są dołączane do Lucene, by
rozszerzyć jego funkcjonalności w aplikacjach, którym towarzyszy.
Hibernate Search jest cienkim wrapperem wokół Lucene oraz
opcjonalnych komponentów Solra. Rozszerza podstawowy
Hibernate ORM, najpopularniejszy maper obiektowo-relacyjny dla
języka Java.
Poniższy diagram przedstawia zależności pomiędzy wspomnianymi
komponentami:
Zgłoś jeśli naruszono regulamin