Mot-clé - Autocompletion

Fil des billets - Fil des commentaires

lundi 21 décembre 2009

Améliorer les performances de like et recherche partielle de mots dans Postgres

Lorsque j'ai voulu faire un système d'auto-complétion pour un champs de recherche sur une page web, j'ai pensé à utiliser un moteur de recherche fulltext, malheureusement, les recherches fulltext ne se font que sur des mots entiers. j'ai donc pensé à utiliser la fonction like de Postgres. Malheureusement, like n'utilisent les indexes, seulement si '%' est placé en fin de chaine, et cela ne correspondait pas à mon besoin. De plus il fallait absolument que les requêtes soit rapides, pour que l'auto-complétion soit utilisable. Après avoir écumé le web à la recherche d'une solution, et n'ayant rien trouvé de concluant, j'ai décidé de faire un peu de R & D et d'implémenter une solution maison qui utilise les indexes. L'astuce réside dans l'utilisation d'un algorithme Edge n-gram et d'une recherche fulltext qui, elle, utilise les indexes. Voici la solution pour utiliser les indexes dans les différents cas suivants :

  • tous les mots commençant par
  • tous les mots finissant par
  • tous les mots contenant

Lire la suite...