我正在尝试检索有关LDAP上的组的数据。由于我需要对结果进行分页,因此我需要运行范围查询。我的设置使用JNDI连接到LDAP。我正在尝试运行此查询
(&(objectclass=group)(range=1-500))
我做错了什么?我知道LDAP有基于范围的查询,如何修改此查询以获得相同的查询?
答案 0 :(得分:4)
分页是一回事,范围是另一回事。当有超过1000个条目(至少是Active Directory中的默认值)时,您可以分页从LDAP服务器返回的结果。
MSDN有an article on how to do paged searches in .NET;希望你能将它转化为你的环境。
范围是something different。当您具有具有大量值的多值属性(通常是组的member
- 属性)时,可以使用范围。所以你不能在查询中有范围。您需要在访问多值属性时指定范围(然后在代码中指定member
而不是仅指定member;range=1-500
来访问您指定的属性值{{1}},以从该多值属性获取前500个值)。
答案 1 :(得分:2)
如果您的AD版本为2003或更高版本,则可以考虑使用“虚拟列表视图”控件,而不是简单的页面调度控件。虚拟列表视图提供了高级结果排序选项,使您可以更有效地控制搜索结果集的子集。
答案 2 :(得分:1)
这是您需要查询以获得结果的方式
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);