如何使用Apache Directory API进行排序的搜索



我正在使用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

i基于此集成测试的代码https://github.com/apache/directory-server/blob/master/server-server-integ/src/src/test/java/java/opache/apache/directe/directory/server/server/server/server/search/search/search/search/sortedsearchit.java,我看不到我做错了什么。

谁能提供任何建议?谢谢。

大量挖掘后,我不得不做两件事才能使它起作用。

首先将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

然后,我必须指定Sort Key的匹配规则ID

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

希望这对某人有帮助!

最新更新