mercredi, mars 23, 2005

Lucene Fuzzy Query

Cet article naît d'une incohérence déconcertante apparue lorsque j'ai utilisé pour la première fois les "fuzzy query" de Lucene.

Les fuzzy query permettent d'obtenir des résultats de recherche sur des mots "proches" les uns des autres. Le concept de proximité est issu ici de la notion de distance entre mot, correspondant à l'algorithme de Levenshtein.

Une distance de 1 entre deux mots correspond à soit un échange de lettre, un retrait ou un ajout de lettre pour passer de la premiere occurence de mot à l'autre.

La méthode FuzzyQuery(Term, float, int), permet de créer une FuzzyQuery pour un taux d'erreur donné en float, et un préfixe de longueur donné en int.

Si la longueur de préfixe est de 2, Lucene va alors parcourir tous les mots commencant par ce préfrixe et calculer les distances par rapport au terme donné.

Ce que le bouquin Lucene in action ne dit pas, c'est que le taux d'erreur de 1 - (distance / longueur de mot) n'est pas calcul sur le mot entier, mais uniquement sur le suffixe.

Ce point de détail expliquera bien des comportements anormaux constaté lors de vos premiers tests.

Aucun commentaire: