Как выполнять запросы диапазона в LDAP

Я пытаюсь получить данные о группах в LDAP. Поскольку мне нужно разбивать результаты на страницы, мне нужно запускать запросы диапазона. Моя установка использует JNDI для подключения к LDAP. Я пытаюсь запустить этот запрос

 (&(objectclass=group)(range=1-500))

Что я делаю не так? Я знаю, что для LDAP есть запросы на основе диапазона, как мне изменить этот запрос, чтобы получить то же самое?


person Ritesh M Nayak    schedule 15.01.2010    source источник


Ответы (3)


Ну пейджинг это одно, а диапазон это другое. Вы просматриваете результаты, полученные с сервера LDAP, когда имеется более 1000 записей (по крайней мере, это значение по умолчанию в Active Directory).

В MSDN есть статья о том, как выполнять постраничный поиск в .NET. ; надеюсь, вы сможете перевести это в свою среду.

Диапазон отличается. Вы используете диапазон, когда у вас есть многозначный атрибут (обычно это member-атрибут для группы), который имеет большое количество значений. Таким образом, у вас не может быть диапазона в запросе. Вам необходимо указать диапазон при доступе к атрибуту с несколькими значениями (тогда вместо простого указания member в коде доступа к значению свойства вы указываете member;range=1-500, чтобы получить первые 500 значений из этого атрибута с несколькими значениями).

person Per Noalt    schedule 15.01.2010
comment
Я пытался использовать этот подход для выполнения запросов диапазона, но, похоже, не смог преодолеть барьер ограничения в 1000 записей. Есть предложения? - person Ritesh M Nayak; 16.02.2010
comment
@RiteshMNayak, как я понял, вам нужно указать этот атрибут attr + range при выполнении запроса к LDAP вместо реального атрибута. См. ответ Рави Маха - person Alexey; 18.07.2016

Вместо элемента управления Simple Paging вы можете рассмотреть возможность использования элемента управления Virtual List View, если ваша AD версии 2003 или выше. Представление виртуального списка предоставляет расширенные возможности сортировки результатов и дает вам больше возможностей для управления подмножеством набора результатов поиска.

person Kirill Kovalenko    schedule 03.02.2010

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

int start = 0;
int step = 1500;
int finish = 1499;
boolean finished = false;
String range;

String returnedAtts[] = {"member;Range=" + range};
searchCtls.setReturningAttributes(returnedAtts);
NamingEnumeration answer = readableDirContext.search(searchDN, searchFilter, searchCtls);
person Ravi Macha    schedule 16.06.2015
comment
Вы никогда ничего не присваиваете диапазону String. - person Matti Virkkunen; 03.04.2018
comment
диапазон=0-1000; - person bigbadmouse; 07.02.2020