Introduction à Hibernate Search

De nombreuses applications Web existent pour donner accès à de grandes quantités de données stockées dans une base de données relationnelle, mais quel est le moyen le plus simple de permettre aux utilisateurs de rechercher dans ces données et de trouver ce dont ils ont besoin? Dans cet article, le Dr Xinyu Liu présente Hibernate Search, qui intègre les capacités de recherche sophistiquées de Lucene avec le cadre familier de mappage objet-relationnel d'Hibernate.

Apache Lucene est une bibliothèque de moteur de recherche de texte intégral extensible haute performance écrite en Java. Au début, la raison pour laquelle vous auriez besoin d'une telle chose n'est peut-être pas évidente - après tout, vos données sont bien rangées dans une base de données relationnelle décente. Alors qu'un SGBDR peut faire un excellent travail en fournissant des opérations CRUD transactionnelles sur des données stockées dans un modèle relationnel, les fonctions de recherche définies dans SQL ne sont pas toujours capables de répondre aux exigences fonctionnelles et non fonctionnelles de vos projets. Il existe un certain nombre de types de requêtes que les SGBDR en général ne prennent pas en charge sans les extensions de fournisseur:

  • Requêtes floues, dans lesquelles "flou" et "wuzzy" sont considérés comme des correspondances
  • Requêtes issues de mots, qui considèrent que «prendre», «prendre» et «prendre» sont identiques
  • Requêtes semblables à des sons, qui considèrent que "cat" et "kat" sont identiques
  • Requêtes de synonyme, qui considèrent que "saut", "saut" et "saut" sont identiques
  • Requêtes sur les types de données BLOB binaires, tels que les documents PDF, les documents Microsoft Word ou Excel, ou les documents HTML et XML

Plus décevant, les résultats de recherche SQL ne sont pas classés en fonction des scores de pertinence de correspondance. La norme SQL n'est tout simplement pas destinée aux requêtes de texte intégral.

Les capacités de recherche de Lucene, en revanche, sont illimitées. Lucene gère toutes les requêtes mentionnées ci-dessus, et plus encore; il vous permet également de rechercher des documents texte similaires à d'autres documents grâce à sa requête avancée de termes-vecteurs. Par exemple, vous pouvez rechercher le contenu d'un certain nombre de livres pour en trouver un avec un contenu similaire à celui d' Hibernate in Action . L'architecture de l'analyseur de Lucene exploite les capacités intégrées d'internationalisation et de localisation de Java, ce qui rend les requêtes de texte intégral disponibles pour différentes langues dans le monde. Lucene offre des performances exceptionnelles grâce à certaines techniques innovantes, telles qu'un indice inversé. Le site Web Apache Lucene propose une liste de tests de performances qui démontrent les performances et l’évolutivité de Lucene.

Notez que certains fournisseurs de bases de données implémentent des fonctions de recherche en texte intégral dans leurs produits en tant qu'extensions SQL. Dans une certaine mesure, ces fonctions propriétaires sont assez faciles à utiliser, mais elles compromettent la portabilité de vos applications au niveau de la base de données. En outre, les fonctionnalités ne correspondent pas à l'expérience utilisateur offerte par Lucene et, dans des conditions extrêmes, les performances de Lucene sont supérieures.

Hibernate et l'API Java Persistence

Hibernate est une bibliothèque de mappage objet-relationnel (ORM) mature et performante. En tant que solution ORM non intrusive, Hibernate fournit des API de requête d'objet pour les classes de modèle de persistance d'objet Java (POJO) et des liaisons de données automatiques entre l'objet et les représentations relationnelles des données de persistance. En substance, il vous permet de vous concentrer sur la programmation orientée modèle de domaine.

L'API Java Persistence (JPA) est l'interface standard de mappage objet-relationnel et de gestion de la persistance définie dans le cadre de Java EE 5, la dernière version de la spécification Java d'entreprise. Largement inspiré par Hibernate, JPA est apparu pour remplacer le modèle de programmation controversé du bean entité. JPA possède un style de programmation POJO et une interface de requête d'objet (JPAQL) faciles à utiliser; une amélioration de JPA par rapport aux beans entité est que vous n'avez pas besoin d'un conteneur EJB 3 pour exécuter des applications qui utilisent l'API, car il prend en charge les modes d'exécution autonome (Java SE) et géré par conteneur (Java EE). Les fournisseurs JPA populaires incluent Apache OpenJPA et Oracle TopLink, ainsi que Hibernate lui-même, qui implémente la spécification JPA via les modules complémentaires Hibernate Annotations et Hibernate EntityManager. Dans cet article, je vais utiliserJPA / Hibernate comme raccourci pour les deux travaillant ensemble.

Cet article vous présente la technologie de Hibernate Search à travers un exemple d'application programmé dans un style POJO avec les dernières annotations Spring 2.5. Avant de commencer, vous devez avoir des connaissances de base sur Spring, Hibernate / JPA et Lucene.