Pengantar Pencarian Hibernasi

Ada banyak aplikasi Web untuk menyediakan akses ke data dalam jumlah besar yang disimpan dalam database relasional, tetapi apa cara termudah untuk memungkinkan pengguna mencari melalui data itu dan menemukan apa yang mereka butuhkan? Dalam artikel ini, Dr. Xinyu Liu memperkenalkan Hibernate Search, yang mengintegrasikan kemampuan pencarian canggih Lucene dengan kerangka kerja pemetaan relasional objek Hibernate.

Apache Lucene adalah pustaka mesin telusur teks lengkap berperforma tinggi dan dapat diperluas yang ditulis dalam Java. Pada awalnya, mungkin tidak jelas mengapa Anda membutuhkan hal seperti itu - lagipula, data Anda disimpan dengan baik dalam database relasional yang layak. Meskipun RDBMS dapat melakukan pekerjaan yang baik dalam menyediakan operasi CRUD transaksional pada data yang disimpan dalam model relasional, fungsi pencarian yang ditentukan dalam SQL tidak selalu mampu memenuhi persyaratan fungsional dan non-fungsional proyek Anda. Ada sejumlah tipe kueri yang secara umum tidak didukung RDBMS tanpa ekstensi vendor:

  • Kueri fuzzy, di mana "fuzzy" dan "wuzzy" dianggap cocok
  • Query stemming kata, yang menganggap "take", "taking", dan "taking" menjadi identik
  • Kueri mirip suara, yang menganggap "cat" dan "kat" identik
  • Kueri sinonim, yang menganggap "lompat", "lompat", dan "lompatan" sebagai identik
  • Kueri pada tipe data BLOB biner, seperti dokumen PDF, dokumen Microsoft Word atau Excel, atau dokumen HTML dan XML

Lebih mengecewakan lagi, hasil pencarian SQL tidak diberi peringkat berdasarkan skor relevansi-kecocokan. Standar SQL tidak ditujukan untuk kueri teks lengkap.

Kemampuan pencarian Lucene, di sisi lain, tidak terbatas. Lucene menangani semua pertanyaan yang baru saja disebutkan, dan banyak lagi; ini juga memungkinkan Anda untuk menemukan dokumen teks yang mirip dengan dokumen lain melalui kueri vektor-istilah lanjutannya. Misalnya, Anda dapat mencari konten dari sejumlah buku untuk menemukan konten yang mirip dengan Hibernate in Action . Arsitektur penganalisis di Lucene memanfaatkan kemampuan lokalisasi dan internasionalisasi bawaan Java, yang membuat kueri teks lengkap tersedia untuk berbagai bahasa di seluruh dunia. Lucene memberikan kinerja luar biasa melalui beberapa teknik inovatif, seperti indeks terbalik. Situs Web Apache Lucene menampilkan daftar tolok ukur kinerja yang menunjukkan seberapa baik kinerja dan skala Lucene.

Perhatikan bahwa beberapa vendor database menerapkan fungsi pencarian teks lengkap dalam produk mereka sebagai ekstensi SQL. Sampai taraf tertentu, fungsi berpemilik ini cukup mudah digunakan, tetapi mengganggu portabilitas aplikasi Anda di tingkat database. Selain itu, fitur-fiturnya tidak cocok dengan pengalaman pengguna yang ditawarkan Lucene, dan dalam kondisi ekstrim kinerja Lucene lebih unggul.

Hibernate dan Java Persistence API

Hibernate adalah pustaka object-relational mapping (ORM) berperforma tinggi dan matang. Sebagai solusi ORM non-intrusif, Hibernate menyediakan API kueri objek untuk kelas model ketekunan objek Java lama (POJO) dan pengikatan data otomatis antara objek dan representasi relasional dari data persistensi. Intinya, ini memungkinkan Anda fokus pada pemrograman berorientasi model domain.

Java Persistence API (JPA) adalah pemetaan relasional objek standar dan antarmuka manajemen persistensi yang didefinisikan sebagai bagian dari Java EE 5, versi terbaru dari spesifikasi Java perusahaan. Sebagian besar terinspirasi oleh Hibernate, JPA muncul untuk menggantikan model pemrograman kacang entitas yang kontroversial. JPA memiliki gaya pemrograman POJO dan antarmuka kueri objek (JPAQL) yang mudah digunakan; Salah satu peningkatan JPA atas biji entitas adalah Anda tidak memerlukan kontainer EJB 3 untuk menjalankan aplikasi yang menggunakan API, karena API mendukung mode berjalan mandiri (Java SE) dan dikelola kontainer (Java EE). Penyedia JPA yang populer termasuk Apache OpenJPA dan Oracle TopLink, serta Hibernate itu sendiri, yang mengimplementasikan spesifikasi JPA melalui modul Add-on Hibernate Annotations dan Hibernate EntityManager. Pada artikel ini, saya akan menggunakanJPA / Hibernate sebagai singkatan dari keduanya bekerja bersama.

Artikel ini menyajikan teknologi Hibernate Search kepada Anda melalui contoh aplikasi yang diprogram dalam gaya POJO dengan penjelasan Spring 2.5 terbaru. Sebelum Anda mulai, Anda harus memiliki pengetahuan dasar tentang Spring, Hibernate / JPA, dan Lucene.