如何在LDAP上运行范围查询

时间:2010-01-15 10:30:19

标签: active-directory ldap jndi ldap-query

我正在尝试检索有关LDAP上的组的数据。由于我需要对结果进行分页,因此我需要运行范围查询。我的设置使用JNDI连接到LDAP。我正在尝试运行此查询

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

我做错了什么?我知道LDAP有基于范围的查询,如何修改此查询以获得相同的查询?

3 个答案:

答案 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);