首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Apache Directory API执行排序搜索

如何使用Apache Directory API执行排序搜索
EN

Stack Overflow用户
提问于 2019-03-07 02:54:43
回答 1查看 298关注 0票数 0

我正在使用Apache Directory API查询OpenLDAP服务器。我认为这段代码应该返回按sn排序的结果,但它们是按随机顺序返回的。

代码语言:javascript
复制
    SearchRequest req = new SearchRequestImpl();
    req.setScope(SearchScope.ONELEVEL);
    req.addAttributes("*");
    req.setTimeLimit(0);
    req.setBase(searchDn);
    req.setFilter("(objectclass=posixAccount)");

    SortRequest sortRequest = new SortRequestControlImpl();
    sortRequest.addSortKey(new SortKey("sn"));
    req.addControl(sortRequest);

    try (EntryCursor cursor = new EntryCursorImpl(connection.search(req))) {        
        for (Entry entry : cursor) {
            System.out.println("sn: " + entry.get("sn").getString());                
        }
    }

来自我的测试LDAP服务器中的数据的此代码的输出为:

代码语言:javascript
复制
sn: Trainee 
sn: Admin 
sn: User 
sn: Supervisor 
sn: Supervisor

我的代码基于这个集成测试https://github.com/apache/directory-server/blob/master/server-integ/src/test/java/org/apache/directory/server/operations/search/SortedSearchIT.java,我看不出我做错了什么。

有人能给点建议吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-11 21:37:46

在深入研究之后,我必须做两件事才能让它正常工作。

首先向我的OpenLDAP服务器添加sssvlv支持

这是ldif

代码语言:javascript
复制
dn: cn=module{0}, cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: sssvlv.la

dn: olcOverlay=sssvlv,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcSssVlvConfig
olcSssVlvMax: 10
olcSssVlvMaxKeys: 5

然后,我必须为排序关键字指定匹配规则ID

代码语言:javascript
复制
SortKey sk = new SortKey( "sn", SchemaConstants.NUMERIC_STRING_ORDERING_MATCH_MR_OID);

希望这能对某些人有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55030297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档