3.3. 使用命令行将索引扫描限制设置为数据库
在某些情况下,对于为特定索引定义限制或根本不使用 ID 列表,这很有用。您可以为不同类型的搜索过滤器配置 ID 列表扫描限值。
例如,在一个大型数据库中,有 1,000万条目包含对象类 inetOrgPerson
,(& (objectClass=inetOrgPerson) (uid=user)
首先创建一个 ID 列表,其中包含与 objectClass=inetOrgPerson
匹配的所有 1,000万 ID。当数据库应用过滤器的第二部分时,它将搜索结果列表以获取与 uid=user
匹配的对象。在这种情况下,对于为特定索引定义限制或根本不使用 ID 列表,这很有用。
此流程演示了如何配置 Directory 服务器来记录 AND
子句中的 objectClass=inetOrgPerson
条件创建 ID 列表。
流程
设置
nsIndexIDListScanLimit
参数:# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x dn: cn=objectclass,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config changetype: modify replace: nsIndexIDListScanLimit nsIndexIDListScanLimit: limit=0 type=eq flags=AND values=inetOrgPerson
使用这些设置,Directory 服务器不会在
AND
子句中为objectClass=inetOrgPerson
条件创建任何 ID 列表。在所有其他情况下,Directory 服务器应用全局 ID 列表扫描限制值。nsIndexIDListScanLimit
参数使用以下语法:nsIndexIDListScanLimit: limit=NNN [type=eq[,sub,...]] [flags=AND[,XXX,...]] [values=val[,val,...]]
limit
:设置 ID 列表的最大值。有效值为:-
-1
: unlimited -
0
:不使用索引 -
1
到 32 位整数的最大(2147483647
):最大 ID 数
-
类型
:可选:设置更改扫描限制行为的标记。有效值为:-
AND
:仅应用扫描限制,以搜索AND
子句中的 属性。 -
OR
:应用扫描限制,仅要搜索OR
子句中显示的属性。
-
值
:可选:一个以逗号分隔的值列表,值必须与搜索过滤器匹配,才能应用限制。由于每次都匹配一次匹配,因此如果有任何值匹配,这些值将匹配。一次只使用一个类型的值。值必须与索引类型和应用索引的属性的语法对应。例如,如果您指定了基于整数的属性
uidNumber
,并为eq
类型进行索引,则无法使用type=eq values=abc
。如果值包含需要转义的空格、commas、NULL 或其他值,请使用 LDAP 过滤器转义语法: A反斜杠(\)后跟字符的 2 个十六进制代码。在以下示例中,DN 值中的逗号使用
\2C
进行转义:nsIndexIDListScanLimit: limit=0 type=eq values=uid=user\2Cou=People\2Cdc=example\2Cdc=com