Il y a 14 ans -
Temps de lecture 3 minutes
Jazoon – Jour 3 – Hibernate Search
Nous avons assisté à la présentation de Hibernate Search par Emmanuel Bernard (project leader). Pour faire simple Hibernate Search est une API qui permet de « googler » votre modèle en s’appuyant sur Apache Lucene. Nous en avions déjà parlé dans cette introduction à Hibernate Search.
Néanmoins c’est l’occasion de revenir sur certains concepts et problématiques abordés par les recherches full-text, très bien expliqués par Emmanuel :
- Trier les résultats par pertinence
- Extraire la quintessence : « le Blog de XEbia » -> « blog xebia »
- Approximation : « xeiba » -> « xebia »
- Recherche phonétique
- Synonymes
- Même famille/racine : « opérer, opération, opérez »
Pertinence
La pertinence est déterminée par le nombre d’occurences trouvées :
- Nombre d’occurences par document pour un mot-clef.
- Nombre d’occurences de nombre de mots-clefs pour un document.
La pertinence dépend aussi des champs dans lesquels on effectue la recherche. On peut « prioriser » certains champs par rapport à d’autres. Par exemple on peut affecter un poids plus important au titre d’un livre qu’à sa description.
Extraire la quintessence
Le moteur de recherche tokenize la « requête » pour découper et récupérer tous les mots, puis il applique des filtres. Il peut notamment mettre tous les mots en minuscules ou retirer les mots trop courants, sans interêt (« le », « un », « de », etc).
Approximation
L’approximation permet de compenser notamment les fautes de frappe.
Une première approche est de mesurer la similarité entre les mots (distance de Levenshtein/d’édition) mais cela est coûteux niveau performance.
L’autre approche est le N-grammes. Cela consiste à découper les mots en morceaux de n caractères puis d’indexer ces morceaux.
Exemple d’utilisation d’un tri-grammes :
- On découpe et indexe
"Hibernate" -> [hib, ibe, ber, ern, rna, nat, ate]
- L’utilisateur tape
"ybernat" -> [ybe, ber, ern, rna, nat]
- On compare les morceaux en communs :
[ber, ern, rna, nat]
.
Recherche phonétique
Des algorithmes (Soundex, ou plus évolué Metaphone) permettent de calculer des codes phonétiques qui sont stockés dans un index. Mais ce type de recherche n’est pas le plus courant.
Synonymes
La recherche de synonymes se base sur un dictionnaire qui indexe tous les synonymes de chaque mot.
Ce dictionnaire est évidemment propre à chaque domaine métier, chaque application, et c’est pour cela qu’il a une réelle valeur ajoutée car même Google ne peut connaitre votre métier aussi bien que vous.
Pour chaque groupe de synonymes il est conseillé d’avoir un mot de référence, qui sera celui indexé. Ainsi les mots saisis par l’utilisateur sont traduits en mots de référence avant d’être comparés à ceux de l’index.
Même famille
L’approche brutale consiste à indexer toutes les variations d’un mot. Plus subtil, on peut supprimer certains suffixes pour ne garder que la racine.
Il existe ensuite des algorithmes avancés (mais majoritairement pour l’anglais), comme celui de Martin Porter avec son langage Snowball.
En pratique
Si vous voulez savoir comment mettre en pratique ces fonctionnalités avec Hibernate Search, (re)lisez ce hands-on.
Commentaire
1 réponses pour " Jazoon – Jour 3 – Hibernate Search "
Published by Thibaud , Il y a 14 ans
Bonjour,
Très intéressant article.
A noter que Snowball (évoqué dans l’article) est intégré dans la chaîne de traitement de requête de Lucene. Toutefois il est possible d’utiliser l’API sans Lucene et dans plusieurs « langages » dont le Java (il est facile à trouver sur la toile). Ce stemmatiseur fonctionne dans plusieurs « langue » dont le Français. Nous l’utilisons depuis longtemps (en français et anglais) et il donne des résultats très satisfaisants (au niveau performance et pertinence).