如何在LDAP上运行范围查询

4

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

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

我做错了什么?我知道LDAP有基于范围的查询,如何修改这个查询以获得相同的结果?
3个回答

5

分页和范围是两个不同的概念。当从LDAP服务器返回的结果超过1000个条目时(至少在Active Directory中是这样),您需要对结果进行分页。

MSDN有一篇关于如何在.NET中进行分页搜索的文章(链接);希望您可以将其翻译到您的环境中。

范围是另一回事。当您有一个具有大量值的多值属性(通常是组的member属性)时,您需要使用范围。因此,您不能在查询中使用范围。您需要在访问多值属性时指定范围(然后在访问属性值的代码中,不仅指定member,而是指定member;range=1-500以获取该多值属性的前500个值)。


我尝试使用这种方法来运行范围查询,但似乎无法突破1000条记录的限制。有什么建议吗? - Ritesh M Nayak
@RiteshMNayak,我理解你需要在LDAP查询中指定“attr+range”而不是实际属性。请查看Ravi Macha的回答。 - Alexey

3

如果您的AD版本是2003或以上,您可以考虑使用Virtual List View控件而不是Simple Paging控件。Virtual List View提供了高级结果排序选项,并使您在控制搜索结果集子集方面更具有力量。


0

这是你需要查询以获取结果的方式

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

1
你从未给“String range”分配任何内容。 - Matti Virkkunen
range="0-1000"; - bigbadmouse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接