A L I M E N T A T I O N
A G R I C U L T U R E
E N V I R O N N E M E N TRéseau BD 11/12/08
Hibernate Search
Réunion d’unité – 23/10/2008
Erik Kimmel
Erik Kimmel – Isabelle Luyten
Au programme…• Généralités• Le full-text, concepts• Problèmes• Hibernate Search
Réseau BD 11/12/08 2
Erik Kimmel – Isabelle LuytenRéseau BD 11/12/08 3
Généralités
Erik Kimmel – Isabelle LuytenRéseau BD 11/12/08 4
Description…• C’est quoi ?
API Java Open Source Module Hibernate (http://www.hibernate.org)
• C’est bien pour Intégrer Hibernate et LuceneTM
Indexer un « object domain model » Ajouter des fonctionnalités de recherche full-text à
une application
• C’est moins bien pour Faire le café Sortir le chien
Erik Kimmel – Isabelle Luyten
…description• Historique
Leader : Emmanuel Bernard Au départ sous-composant de Hibernate Annotations Première release : 3.0.0 Beta1 (19/03/2007) Version actuelle : 3.1.0 Beta1 (17/07/2008)
Réseau BD 11/12/08 5
Erik Kimmel – Isabelle LuytenRéseau BD 11/12/08 6
Full-Text, what’s that ?
Erik Kimmel – Isabelle Luyten
Le full-text…• Un type de recherche orienté « humain »
Requêtes presque naturelles
• Recherches de : Mots Phrases
• Recherches par : Pertinence Approximations
Réseau BD 11/12/08 7
Erik Kimmel – Isabelle Luyten
…le full-text• Fonctionnalités :
Opérateurs booléens Contrôle de l’indexation : les mots courants ne sont pas
indexés Indexation de différents supports : Texte, HTML, DOC,
PDF, XML… Mise à jour d’un index
• Solutions : Moteurs pour les BD : MySQL: Full Text Search, Senna,
PostgreSQL: Tsearch2, Oracle: Oracle Text Fonctionnalités DB : procédures, tables de mots-clé Solutions externes : LuceneTM, Sphinx, mnogosearch
Réseau BD 11/12/08 8
Erik Kimmel – Isabelle Luyten
Indexer• Objectif :
Créer une structure permettant de rendre les recherches de données plus efficace
• Etapes : Rassembler l’information Conversion en texte
(document) Extraire les mots
(atomiques) des documents
Stockage
Réseau BD 11/12/08 9
Erik Kimmel – Isabelle Luyten
Rechercher• Etapes :
Requête utilisateur Déterminer la liste des
mots Trouver les documents
appropriés Éliminer les mauvais Ordonner par
pertinence
Réseau BD 11/12/08 10
Erik Kimmel – Isabelle LuytenRéseau BD 11/12/08 11
Problèmes
Erik Kimmel – Isabelle Luyten
Les mismatches• Entre le monde « objet » et le monde « texte
plat »• 3 types :
Mismatch structural Mismatch de synchronisation Mismatch de récupération des résultats
• Limitations pour l’utilisation d’un moteur full-text
Réseau BD 11/12/08 12
Erik Kimmel – Isabelle Luyten
Mismatch structural
Réseau BD 11/12/08 13
Erik Kimmel – Isabelle Luyten
Mismatch de synchronisation
Réseau BD 11/12/08 14
Erik Kimmel – Isabelle Luyten
Mismatch de récupération• Résultats des recherches : documents• Structure : Map (paires clé/valeur)• Difficulté : convertion en objets métier
Réseau BD 11/12/08 15
Erik Kimmel – Isabelle LuytenRéseau BD 11/12/08 16
Hibernate Search, technique
Erik Kimmel – Isabelle Luyten
Configuration• Pré-requis : Java 1.5+, Hibernate Core,
Hibernate Annotations• Projet maven : ajout des dépendances• Définition des « directories »• Mapping Hibernate, annotations
Réseau BD 11/12/08 17
package example.Book;
@Entity@Indexedpublic class Book { @Id @DocumentId private Integer id;
@Field(index=Index.TOKENIZED, store=Store.YES) private String body;
@Field(index=Index.TOKENIZED, store=Store.YES) private String summary;
...}
Erik Kimmel – Isabelle Luyten
Indexation• Transparente• Transactionnelle
Réseau BD 11/12/08 18
Erik Kimmel – Isabelle Luyten
Mapping• Définir les attributs à indexer• Stratégies :
Tokenized Untokenized
• Conversion des types : Bridges Représentation String d’un type
• Associations Dénormalisation Document unique
Réseau BD 11/12/08 19
Erik Kimmel – Isabelle Luyten
Recherches• Types :
Même SessionFactory Même API qu’Hibernate Core Résultats : objets de persistence
• Utilisation de la syntaxe Lucene• Restriction sur les types recherchés• Pagination• Lazy loading
Réseau BD 11/12/08 20
Erik Kimmel – Isabelle Luyten
Conclusion / Résumé• Outil Open Source• Ajout de fonctionnalités de recherche full-
text à une application• Utilisation de LuceneTM
• Synchronisation transparente entre base de données et index
• Conversion entre « domain model » et index grâce aux annotations
• Réutilisation de l’API Hibernate pour les requêtes
Réseau BD 11/12/08 21
Erik Kimmel – Isabelle LuytenRéseau BD 11/12/08 22
Questions… et peut-être réponses
Top Related