web-dev-qa-db-fra.com

utilisation de caractères génériques dans les filtres / requêtes de recherche LDAP

J'ai une connaissance très limitée des requêtes AD et LDAP, j'ai donc une question simple sur la façon d'utiliser les caractères génériques.

Supposé qu'il existe un objet avec un nom d'affichage "ITSM - Gestion des problèmes"

Mon implémentation actuelle du filtre avec un caractère générique est la suivante:

(displayName=SEARCHKEYWORD*)

Si un utilisateur saisissait un mot clé "Problème", il ne pourrait pas trouver l'objet car il a besoin de la première partie du nom, c'est-à-dire "ITSM -"

Je voudrais implémenter le caractère générique aux deux extrémités comme ci-dessous:

(displayName=*SEARCHKEYWORD*)

Idéalement, cela permettrait de saisir "Problème" et de le faire rechercher "ITSM - Gestion des problèmes". Mais le caractère générique ne semble pas fonctionner lorsque vous le mettez au début. Quand je l'ai essayé, il semble juste raccrocher et ne retourner aucun résultat.

Avez-vous des idées ou des réflexions sur la façon de résoudre ce problème? Toute contribution serait très appréciée. Merci!

20
AnimaSola

Un argument de filtre avec un * de fin peut être évalué presque instantanément via une recherche d'index. Un astérisque * implique une recherche séquentielle dans l'index, il s'agit donc de O (N). Cela prendra des siècles.

Je vous suggère de reconsidérer l'exigence.

26
user207421

Le mieux serait d'anticiper les préfixes, donc:

"(|(displayName=SEARCHKEY*)(displayName=ITSM - SEARCHKEY*)(displayName=alt prefix - SEARCHKEY*))"

Clunky, mais je fais une chose similaire au sein de mon organisation.

7
Rich

Cela devrait fonctionner, au moins selon l'article Search Filter Syntax sur le réseau MSDN.

Le "raccrochage" que vous avez remarqué n'est probablement qu'un retard. Essayez d'exécuter la même requête avec une portée plus étroite (par exemple, l'unité d'organisation spécifique où se trouve l'objet de test), car le traitement peut prendre beaucoup de temps si vous l'exécutez sur tous les objets AD.

Vous pouvez également essayer de séparer le filtre en deux parties:

(|(displayName=*searchstring)(displayName=searchstring*))
1
ShaMan-H_Fel