【问题标题】:Is there a way to get only the first N search results with LDAP?有没有办法使用 LDAP 只获取前 N 个搜索结果?
【发布时间】:2013-04-06 07:49:33
【问题描述】:

有没有一种好方法只检索 LDAP 查询的前 N ​​个结果,以节省服务器负载并增加响应时间?

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

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

【问题讨论】:

    标签: .net ldap


    【解决方案1】:

    出于您的特定目的(自动完成建议),我会使用 ldap sizelimit 而不是分页结果。区别如下:

    大小限制

    您对前 xx 个对象感兴趣。你不关心其他的,你也不需要其他的。

    分页结果

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

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

    我不是 .NET 程序员,但 Google 发现了这个,你可能会感兴趣:
    system.directoryservices.directorysearcher.sizelimit

    有关更多详细信息,您还可以查看 RFC 页面(在此处搜索 sizelimit):
    rfc1777

    【讨论】:

    • System.DirectoryServicesSystem.DirectoryServices.Protocol 是非常不同的 API。它们不相关。
    • 错误的 API 并查看我的 cmets 以了解有关 sizeLimit 的其他答案。
    • 好的,那么,这个呢? msdn.microsoft.com/en-us/library/…
    • 第一次复制了错误的链接 - 现在它指向协议命名空间中的预期文档。无论如何,基于分页结果的搜索和限制大小的搜索之间的排序没有区别。至于广告,在订购过程中似乎非常一致。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,我知道了;我的 LDAP 实用程序接口还根据需要为此目的创建 SortRequestControl。此外,虽然我不会指望它,因为它可能会导致可怕的未来错误,但我的经验是,TDS 实际上确实以确定的顺序返回结果,可能基于支持 DB2 数据库的索引。是的,我意识到这是一个未指定的实现细节。
    【解决方案3】:

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

    【讨论】:

    • 这既没有解决获得分页结果所需的较低级别协议信息,也没有解决使用 System.DirectoryServices.Protocol 实现它的 .NET 方法——javax 资源对我没有好处。
    • @SAJ14SAJ 我误以为 Java 和 JNDI,但 .NET 中肯定有其中之一吗?如果是这样,它肯定会为您处理协议细节,这就是重点。
    • 是的,原来s.ds.p中有PageResultRequestControl;显然对该功能的支持并不普遍。
    • 我编辑了帖子,但它仍然不允许我删除反对票;对不起。啊,我这里没有足够的代表来单方面编辑。
    • @SAJ14SAJ 自己修好了。
    猜你喜欢
    • 2017-04-02
    • 2022-10-13
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多