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