Recherches spécifiques à PostgreSQL

Similarité par trigramme

L’expression de requête trigram_similar permet d’effectuer des requêtes selon des trigrammes, mesurant le nombre de trigrammes (trois caractères consécutifs) partagés en utilisant une extension PostgreSQL dédiée. Une requête par trigramme reçoit une expression et renvoie des résultats qui ont une mesure de similitude plus grande que le seuil de similitude actuel.

Pour l’utiliser, ajoutez 'django.contrib.postgres' dans le réglage INSTALLED_APPS et activez l’extension pg_trgm dans PostgreSQL. Vous pouvez installer l’extension par une opération de migration TrigramExtension.

La requête trigram_similar peut être utilisée avec les champs CharField et TextField:

>>> City.objects.filter(name__trigram_similar="Middlesborough")
['<City: Middlesbrough>']

Unaccent

La recherche unaccent permet d’effectuer des recherches qui ne dépendent pas des différences d’accents en utilisant une extension PostgreSQL dédiée.

Cette recherche est implémentée en utilisant Transform, elle peut donc être suivie par d’autres fonctions de recherche. Pour l’utiliser, vous devez ajouter 'django.contrib.postgres' dans votre réglage INSTALLED_APPS et activer l’extension unaccent dans PostgreSQL. L’opération de migration UnaccentExtension est disponible si vous souhaitez procéder à cette activation au moyen des migrations.

La recherche unaccent peut être utilisée avec les champs CharField et TextField:

>>> City.objects.filter(name__unaccent="México")
['<City: Mexico>']

>>> User.objects.filter(first_name__unaccent__startswith="Jerem")
['<User: Jeremy>', '<User: Jérémy>', '<User: Jérémie>', '<User: Jeremie>']

Avertissement

Les recherches unaccent fonctionnent très bien dans la plupart des cas. Cependant, les requêtes utilisant ce filtre effectuent généralement des parcours complets des tables, ce qui peut être lent pour les grandes tables. Dans ces situations, il peut valoir la peine d’utiliser les outils dédiés d’indexation plein texte.

Back to Top