如何使用 Apache Directory API 进行排序搜索
How to do a sorted search using Apache Directory API
我正在使用 Apache 目录 API 查询 OpenLDAP 服务器。我认为这段代码应该 return 按 sn
排序的结果,但它们是 return 随机排序的。
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,但我看不出我做错了什么。
谁能给点建议?谢谢。
经过大量挖掘,我必须做两件事才能让它发挥作用。
首先为我的 OpenLDAP 服务器添加 sssvlv 支持
这是 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);
希望这会对某人有所帮助!
我正在使用 Apache 目录 API 查询 OpenLDAP 服务器。我认为这段代码应该 return 按 sn
排序的结果,但它们是 return 随机排序的。
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,但我看不出我做错了什么。
谁能给点建议?谢谢。
经过大量挖掘,我必须做两件事才能让它发挥作用。
首先为我的 OpenLDAP 服务器添加 sssvlv 支持
这是 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);
希望这会对某人有所帮助!