0

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

    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 服务器中的数据的输出是:

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,我看不出我做错了什么。

任何人都可以提供任何建议吗?谢谢。

4

1 回答 1

0

经过大量挖掘,我必须做两件事才能让它工作。

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

这是 ldif

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

SortKey sk = new SortKey( "sn", SchemaConstants.NUMERIC_STRING_ORDERING_MATCH_MR_OID);

希望这会对某人有所帮助!

于 2019-03-11T13:37:46.263 回答