Использование подстановочных знаков в фильтрах/запросах LDAP

У меня очень ограниченные знания в AD и LDAP-запросах, поэтому у меня есть простой вопрос о том, как использовать подстановочные знаки.

Предполагается, что существует объект с именем displayName "ITSM - Управление проблемами"

Моя текущая реализация фильтра с подстановочным знаком такова:

(displayName=SEARCHKEYWORD*)

Если пользователь вводит ключевое слово "Проблема", он не сможет найти объект, так как ему нужна первая часть имени, то есть "ITSM -"

Я хотел бы реализовать подстановочный знак на обоих концах, как показано ниже:

(displayName=*SEARCHKEYWORD*)

В идеале это позволило бы войти в "Проблему" и заставить ее искать "ITSM - Управление проблемами". Но подстановочный знак, похоже, не работает, когда вы ставите его с самого начала. Когда я это пробовал, он просто зависает и не возвращает никаких результатов.

Любые идеи или мысли о том, как я могу это решить? Любой вход был бы высоко оценен. Спасибо!

Ответы

Ответ 1

Аргумент фильтра с трейлингом * может быть оценен почти мгновенно через индексный поиск. Ведущий * подразумевает последовательный поиск по индексу, поэтому это O (N). Это займет много времени.

Я предлагаю вам пересмотреть это требование.

Ответ 2

Лучше всего было бы предусмотреть префиксы, поэтому:

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

Clunky, но я делаю подобное в своей организации.

Ответ 3

Это должно работать, по крайней мере, в соответствии с Синтаксисом фильтра поиска в сети MSDN.

"зависание", которое вы заметили, вероятно, просто задержка. Попробуйте выполнить тот же запрос с более узкой областью (например, конкретное подразделение, где находится тестовый объект), так как это может занять очень много времени для обработки, если вы запускаете его во всех объектах AD.

Вы также можете попробовать разделить фильтр на две части:

(|(displayName=*searchstring)(displayName=searchstring*))