использование подстановочных знаков в фильтрах / запросах поиска LDAP - PullRequest
18 голосов
/ 05 марта 2012

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

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

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

(displayName=SEARCHKEYWORD*)

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

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

(displayName=*SEARCHKEYWORD*)

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

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

Ответы [ 3 ]

26 голосов
/ 06 марта 2012

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

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

7 голосов
/ 08 ноября 2014

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

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

Неуклюжий, но я делаю аналогичные вещи в своей организации.

1 голос
/ 05 марта 2012

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

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

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

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