OpenDJ vlv index error: # Server-side sort failed: Unwilling to Perform

OpenDJ vlv index error: # Server-side sort failed: Unwilling to Perform

我使用的是 OpenDJ 3.0.0 发行版。

我有两个基础 dns,第一个是 dc=tenant1,第二个是 dc=tenant2,我创建的 vlv 索引是基于 dc=tenant1,但是 ldap 搜索发生在 dc=tenant2

这是vlv索引,看起来像 筛选: (&(objectClass=ns-nationsky-base-subject)(uid=)(cn=))

基础 dn:dc=tenant1 排序 order:uid cn 邮件 范围:一级

当我尝试将 ldapsearch 与 vlv 控件一起使用时,会出现“# Server-side sort failed: Unwilling to Perform”,如下所示:

/ldapsearch -p 1389 -h localhost -D 'cn=Directory Manager' -w 'password' -b 'ou=People,ou=Subjects,dc=tenant2' -G 0:2000:1:0 -s one --sortorder uid "( uid=a)" cn

一切正常,但如果我的服务器中的条目太多(比如 15000),它总是会出现“# Server-side sort failed: Unwilling to Perform”的错误。(比如 15000)

从访问日志中,我可以看到未索引的搜索 [19/Sep/2016:23:06:38 +0800] SEARCH REQ conn=35 op=1 msgID=2 base="ou=People,ou=Subjects,dc=tenant2" scope=one filter="(uid=a )" 属性="cn" [19/Sep/2016:23:06:40 +0800] SEARCH RES conn=35 op=1 msgID=2 result=0 nentries=8458 unindexed etime=2543

知道如何修复它吗?

VLV 索引和查询实际上是为了浏览一组众所周知的条目(就像所有用户一样)而不是变化的条目集。

因此,为了使用 VLV 索引,搜索请求必须匹配为该索引定义的基础、范围、过滤器和排序顺序(并且过滤器应该是常量)。

如果 VLV 索引是用 (&(objectClass=ns-nationsky-base-subject)(uid=)(cn=)) 定义的,则使用 (uid=a) 的搜索将不匹配索引和因此不能使用。

服务器端排序是一个非常昂贵的请求,这就是为什么当没有索引时,服务器会拒绝对很多条目进行排序(受索引条目限制)。虽然可以增加此限制,但这对服务器中使用的资源量有非常严重的影响,并可能严重影响服务器的性能。