manager: search role with unaccent lookup (#87906) #272
No reviewers
Labels
No Label
No Milestone
No Assignees
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: entrouvert/authentic#272
Loading…
Reference in New Issue
No description provided.
Delete Branch "wip/87906-search-role-unaccent"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Le patch est très simple, mais la doc de Django précise ceci par rapport à l'usage de
__unaccent__
:« unaccent lookups should perform fine in most use cases. However, queries using this filter will generally perform full table scans, which can be slow on large tables. In those cases, using dedicated full text indexing tools might be appropriate. »
Et là je ne sais pas très bien ce qu'ils appellent des « large tables », si c'est un grand nombre de colonnes ou la présence de beaucoup de lignes (dans ce cas ça n'ira pas, on veut quelque chose qui répond (très) vite).
Cf https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/lookups/#unaccent
WIP: manager: search role with unaccent lookup (#87906)to manager: search role with unaccent lookup (#87906)manager: search role with unaccent lookup (#87906)to WIP: manager: search role with unaccent lookup (#87906)Vu avec des collègues : il faut "ajouter un index au niveau unaccent" et c'est déjà quelque chose qui existe, cf https://git.entrouvert.org/entrouvert/authentic/src/branch/main/src/authentic2/migrations/0028_trigram_unaccent_index.py
Collègues, je veux bien un peu plus d'éclairage sur ce qu'il faut faire ici. Quel index faut-il créer pour que le lookup
__unaccent__
fonctionne ? Ou faut-il faire autrement que ce d'utiliser ce lookup ?J'ai pas toute l'histoire de django et d'authentic sur tout ça. De ma compréhension de Django, il manque en plus du lookup une définition de la fonction (classe ImmutableUnaccent héritant de Func), qu'on peut alors utiliser dans un index.
La solution actuelle d'authentic n'a pas tout ça et se base sur un index créé en dur dans une migration, et non dans un modèle.
Oui ça n'existait pas à l'époque dans le django qu'on utilisait je pense (surtout les index custom), mais le lookup est déjà là (https://git.entrouvert.org/entrouvert/authentic/src/branch/main/src/authentic2/utils/lookups.py) il manque la fonction pour l'index. Thomas je peux ajouter ça dans la branche si tu veux.
Tip top cool ; je suis toute ouïe.
722f0d9bd9
to3150bd9884
3150bd9884
to48ce80f38a
48ce80f38a
to12fc4ef9f0
12fc4ef9f0
to3af432c6c5
Voilà, mais bon à bien y réfléchir ça ne va rien apporter de grandiose vu qu'on a pas tant de rôles que ça dans la table des rôles. Mais bon c'est sympa juste pour voir comment on fait je pense.
3af432c6c5
toa73235b076
Dernière version, il me manquait encore la définition d'un objet "Transform" enregistré sur TextField et CharField, dans les tests l'index n'est pas utilisé, il n'y a qu'une dizaine de rôle, mais si on rajoute quelques centaines ça le fait (et le gain est quasi nul).
a73235b076
to53a76492e9
WIP: manager: search role with unaccent lookup (#87906)to manager: search role with unaccent lookup (#87906)J'aime beaucoup ce qu'on a fait.
C'est un grand travail d'équipe, je me suis senti tellement utile, c'est fou.
53a76492e9
to67674f56f9