2010-10-08 11 views
0

Étant donné l'entrée d'un champ de recherche de forme libre, j'ai besoin d'interroger le système LDAP et de renvoyer les enregistrements d'utilisateur. Notre schéma LDAP inclut un "preferredName". Les entrées valides possibles sont: "LastName", "GivenName", "PreferredName LastName", "LastName, PreferredName", "GivenName LastName", etc., y compris les variantes de noms de plusieurs mots (avec ou sans traits d'union). Notre processus actuel, moins qu'optimal, répartit les mots, fait des suppositions sur l'ordre (en fonction de la présence ou de l'absence d'une virgule), puis effectue plusieurs requêtes LDAP simples (par exemple: pour "John Smith"). soumettrait les requêtes suivantes:.Quelle est la requête ou requête LDAP optimale pour la recherche d'utilisateurs par nom?

(&(objectclass=person)(sn=*smith*)(preferredName=*john*)) 
(&(objectclass=person)(givenName=*john*)(sn=*smith*)) 

Nous regroupons ensuite et de-duper les résultats des requêtes multiples Une solution simple requête serait bien préférable, même si la requête elle-même est complexe avec ma compréhension de base. de la syntaxe de requête LDAP, je pourrais enchaîner toutes les permutations possibles des mots de nom en une requête gigantesque, mais j'espère qu'il y aura une solution plus élégante

Répondre

1

C'est OK tant que tous ces attributs sont indexés. Mais vous pouvez combiner toutes ces requêtes en une avec le | opérateur, le serveur LDAP le déduiera pour vous, et vous aurez beaucoup moins de trafic réseau, de latence, etc.