Относительно поискового запроса LDAP

Предположим, что я хочу найти число, скажем, 123, а в LDAP есть такие записи, как 123# или 1-2-3. Каким должен быть поисковый фильтр LDAP, который необходимо предоставить? Я пробовал *123*, но это не работает в случае 1-2-3.


person prashanth hariharan    schedule 14.12.2011    source источник


Ответы (1)


LDAP не имеет «записей типа 123#», в нем есть записи, идентифицируемые отличительными именами, которые содержат атрибуты. Чтобы найти запись, содержащую значение, необходимо указать в поисковом запросе следующие параметры:

  • базовый объект (отличительное имя, с которого должен начинаться поиск)
  • область видимости - базовая, на один уровень подчиненная базе, или поддерево (все записи подчинены базовому объекту
  • filter - утверждение, которое должно быть истинным, чтобы запись была возвращена клиенту.
  • возвращаемые атрибуты — список атрибутов, которые требуются клиенту LDAP.

Если рассматриваемый атрибут называется number и имеет синтаксис Integer и правило сопоставления IntegerMatch, то фильтр (number=123) найдет атрибут с именем number с целочисленным значением 123. Какой фильтр использовать, зависит от синтаксиса и правила сопоставления в определении типа атрибута, поскольку сервер каталогов выполняет задачу сопоставления значений атрибута с предоставленными фильтрами с правилами сопоставления (как и приложения, кстати). Программисты не должны рассматривать значения атрибутов LDAP как «строки», вместо этого они должны понимать синтаксис атрибутов и правила сопоставления. Существует синтаксис DirectoryString (с очень специфическим определением, хотя для многих целей его можно рассматривать как стандартную строку), но не все атрибуты определены с синтаксисом DirectoryString. Также не все атрибуты используют одни и те же правила сопоставления и правила упорядочения.

смотрите также

person Terry Gardner    schedule 14.12.2011
comment
мое требование очень простое. Входная строка является динамической. Допустим, 123 - это входная строка, а в БД есть 10203, 19293, 1-2-3, 123. Тогда поиск должен возвращать только 1-2-3 и 123. Поскольку он содержит 1-2-3, я не думаю, что IntegerMatch - это способ сделать это! Единственное, что здесь исправлено, это то, что входные данные всегда будут числами, и db также будет содержать только числа. Я попытался использовать приблизительно (id ~ = 123), но он возвращает все 4 записи в db. Может быть, мне нужно добавить к нему дополнительный фильтр с помощью &, чтобы отфильтровать его дальше. Есть идеи? - person prashanth hariharan; 15.12.2011
comment
Если ваш атрибут имеет синтаксис DirectoryString, вы можете попробовать утверждение фильтра подстроки, например (|(attributename=*123)(attributeName=*1-2-3*)) - person Terry Gardner; 15.12.2011