Publié par

Il y a 10 années -

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.

Publié par

Commentaire

1 réponses pour " Jazoon – Jour 3 – Hibernate Search "

  1. Publié par , Il y a 10 années

    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).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous recrutons

Être un Xebian, c'est faire partie d'un groupe de passionnés ; C'est l'opportunité de travailler et de partager avec des pairs parmi les plus talentueux.