J'ai passé du temps hier a bien décortiquer le mécanisme nuxeo afin de
comprendre pourquoi on a ces différentes requêtes LDAP.
Pour le moment je n'ai fait ce travail que sur les users (3 premières
requêtes) et pas les groupes (4eme requête).
Déjà tu as un
"(eduPersonAffiliation=student)(eduPersonAffiliation=faculty)(eduPersonAffiliation=employee)(eduPersonAffiliation=researcher)"
--> J'imagine que pour ça tu as modifié
default-ldap-users-directory-bundle.xml pour définir la balise
Ce qui faut comprendre c'est que nuxeo utilise un UserService qui lui
même s'appuie sur des Directories qui peuvent être LDAP, SQL ou autres.
Ici le UserService demande au Directories :
- dit moi qui a un "username" qui vaut commence par "robb"
- dit moi qui a un "firstName" qui vaut commence par "robb"
- dit moi qui a un "lastName" qui vaut commence par "robb"
Le fait que le UserService face trois demande fait que l'on a trois
demandes LDAP et pas une seule avec un filtre LDAP avec des "ou" comme
on pourrait s'y attendre.
Ensuite on peut se demander pourquoi le UserService fait ces trois
demandes là et pas d'autres.
En fait nuxeo propose un point d'extension qui permet de définir quels
sont les attributs qui sont requêtés. cf.
http://explorer.nuxeo.org/nuxeo/site/distribution/current/viewExtensionP...
et utilisation de "users/searchFields".
J'ai donc regardé où ce point d'extension était utilisé et je ne l'ai
pas trouvé ! En fait, qu'on le définisse ou pas nuxeo ajoute toujours
"username", "firstName"et "lastName" (sauf si on positionne
"users/searchFields@append" à false dans le point d'extension).
Ensuite on peut se demander comment le "username" devient "uid" (de même
pour "firstName"et "lastName") --> C'est fonction du fichier
default-ldap-users-directory-bundle.xml livré avec ESUP-ECM qui précise :
Enfin pourquoi on a toujours (uid=*) dans le filtre ? --> C'est en dur
dans le code nuxeo et il y a un commentaire pour dire que c'est lié à
une demande de support (Cf. https://jira.nuxeo.org/browse/NXP-2461)
Donc pour les questions de perfs il faut regarder si les champs qui sont
requêtés sont bien indexés dans ton LDAP (attention au type de requête
qui est de type commence par)
Éventuellement tu peux utiliser le point d'extension afin de préciser
les champs sur lesquels tu veux faire la/les requêtes en :
- utilisant "append=false" si tu ne veux plus utiliser les requêtes par
défaut de nuxeo
- utilisant les sous-balises substringMatchSearchField ou
exactMatchSearchField de users/searchFields suivant que tu veux faire de
requêtes de type substring ou pas
A+
Le 20/07/2010 09:38, Julien Troubat a écrit :
> Bonjour,
>
> Nous avons remarqué que la recherche d'utilisateurs dans Esup-ECM
> était très longue, voir trop longue (6 secondes) et parfois même
> n'aboutissait pas.
>
> EN traçant les requêtes sur le serveur LDAP on se rend compte qu'il
> fait des recherches sur plusieurs critères la plupart du temps inutile
> (uid, cn, givenname).
>
> Exemple :
>
> Jul 19 17:04:33 akira slapd[2245]: conn=86125 op=14 SRCH
> base="ou=people,dc=univmed,dc=fr" scope=1 deref=3
> filter="(&(&(&(|(eduPersonAffiliation=student)(eduPersonAffiliation=faculty)(eduPersonAffiliation=employee)(eduPersonAffiliation=researcher)))(uid=*))(uid=robb*))"
>
> Jul 19 17:04:36 akira slapd[2245]: conn=86125 op=15 SRCH
> base="ou=people,dc=univmed,dc=fr" scope=1 deref=3
> filter="(&(&(&(|(eduPersonAffiliation=student)(eduPersonAffiliation=faculty)(eduPersonAffiliation=employee)(eduPersonAffiliation=researcher)))(uid=*))(givenName=robb*))"
>
> Jul 19 17:04:39 akira slapd[2245]: conn=86125 op=16 SRCH
> base="ou=people,dc=univmed,dc=fr" scope=1 deref=3
> filter="(&(&(&(|(eduPersonAffiliation=student)(eduPersonAffiliation=faculty)(eduPersonAffiliation=employee)(eduPersonAffiliation=researcher)))(uid=*))(sn=robb*))"
>
> Jul 19 17:04:39 akira slapd[2245]: conn=86125 op=17 SRCH
> base="ou=groups,dc=univmed,dc=fr" scope=2 deref=3
> filter="(&(&(&(|(objectClass=groupOfNames)(objectClass=groupOfURLs)))(cn=*))(cn=robb*))"
>
>
> Y a-t'il un moyen de modifier la manière dont il effectue la recherche
> pour qu'il se concentre sur le sn. De plus pourquoi faire un filtre
> avec cn=* + cn=robb*. Sachant que la recher demandée est robb.
>
>
> Merci d'avance, bonne journée.
>