有没有办法只使用LDAP获得前N个搜索结果?

时间:2013-04-13 23:43:49

标签: .net ldap

使用LDAP查询检索前N个结果是否有好办法,以节省服务器负载并增加响应时间?

例如,用例是基于渐进式AJAX的名称选择器(通过LDAP到HTTP网关,它希望将查询大小限制到后备LDAP目录),它将查找以用户键入的字母开头的所有结果到目前为止。

使用.NET 4.5 System.DirectoryServices.Protocols的示例代码将不胜感激,但不是必需的,因为如果我知道实际的协议要求是什么,我可以弄清楚如何发送请求。

3 个答案:

答案 0 :(得分:3)

这正是Java PagedResultsControl的用途。 .NET中也有一个。这些东西为您实现协议,只提供API。

答案 1 :(得分:2)

EJP的答案很好。请注意,虽然LDAP客户端可以很容易地将自己限制为前N个结果,但从搜索返回的排序条目不可重复。也就是说,搜索结果中返回的条目顺序不仅没有定义,也不能保证重复,即使在几毫秒后的同一连接上也是如此。对订购敏感的LDAP客户端可能会遇到故障或无法解释的结果。

答案 2 :(得分:0)

出于特定目的(自动填充建议),我会使用ldap sizelimit而不是分页结果。这是区别:

尺寸限制

您对第一个xx对象感兴趣。你不关心其余的事情,你不需要休息。

分页结果

您对 ALL 对象感兴趣,但您希望每页的xx对象批量/ 检索它们。您最终可能需要从服务器获取所有对象。

这里的明显开销是,对于分页结果,服务器必须记住您的搜索状态,并在您请求下一页时适当地恢复它。由于这对于自动完成列表通常是不必要的(除非您希望能够按需扩展自动完成列表),您可以使用sizelimit为服务器节省一些额外负载而不是使用分页结果。

我不是.NET程序员,但谷歌发现了这一点,它可能对你很感兴趣:
system.directoryservices.directorysearcher.sizelimit

有关详细信息,您可能还会看到RFC页面(在那里搜索sizelimit):
rfc1777