Recherches spécifiques à PostgreSQL¶
Similarité par trigramme¶
trigram_similar¶
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")
<QuerySet [<City: Middlesbrough>]>
trigram_word_similar¶
L’expression de requête trigram_word_similar permet d’effectuer des requêtes sur la base de similarité de mot par trigramme en utilisant une extension PostgreSQL dédiée. Cela peut être approximativement compris comme la mesure du plus grand nombre de trigrammes partagés entre le paramètre et toute sous-chaîne du champ. Une requête par mot trigramme reçoit une expression et renvoie des résultats qui ont une mesure de similarité de mots plus grande que le seuil de similarité 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_word_similar peut être utilisée avec les champs CharField et TextField:
>>> Sentence.objects.filter(name__trigram_word_similar="Middlesborough")
<QuerySet [<Sentence: Gumby rides on the path of Middlesbrough>]>
trigram_strict_word_similar¶
Semblable à trigram_word_similar, sauf qu’il force à étendre les limites pour correspondre aux limites du mot.
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_strict_word_similar peut être utilisée avec les champs CharField et TextField.
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.
This lookup is implemented using Transform, so it
can be chained with other lookup functions. To use it, you need to add
'django.contrib.postgres' in your INSTALLED_APPS and activate
the unaccent extension on PostgreSQL. The
UnaccentExtension migration
operation is available if you want to perform this activation using
migrations.
La recherche unaccent peut être utilisée avec les champs CharField et TextField:
>>> City.objects.filter(name__unaccent="México")
<QuerySet [<City: Mexico>]>
>>> User.objects.filter(first_name__unaccent__startswith="Jerem")
<QuerySet [<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.