2.7. 使用命令行创建索引以提高视图的性能
视图基于给定的过滤器从搜索结果衍生而来。过滤器的一部分是在 nsViewFilter
中明确给定的属性;过滤器的其余部分基于条目层次结构,查找视图中包含的实际条目的 entryid
和 parentid
操作属性。
(|(parentid=search_base_id)(entryid=search_base_id)
(|(parentid=search_base_id)(entryid=search_base_id)
如果任何搜索的属性 - entryid
、parentid
或 nsViewFilter
- 中的属性没有被索引,则搜索会部分未索引,并且目录服务器搜索整个目录树是否有匹配的条目。
要提高性能,请创建索引,如下所示:
-
为
entryid 创建
(q)。默认情况下,等号
索引parentid
属性在系统索引中索引。 -
如果
nsViewFilter
测试中的过滤器存在(attribute
),则为正在测试的属性创建 存在索引 (pres
)。您应该只将这个索引类型用于目录条目的次要显示的属性。 -
如果
nsViewFilter
中的过滤器相等(attribute=value
),为正在测试的属性创建 相等索引 (eq
)。 -
如果
nsViewFilter
中的过滤器测试子字符串(attribute=value*
),请为正在测试的属性创建 子字符串索引 (sub
)。 -
如果
nsViewFilter
中的过滤器测试 approximation (attribute~=value
),则为被测试的属性创建大约索引 (大约
)。
例如,当您使用以下视图过滤器时:
nsViewFilter: (&(objectClass=inetOrgPerson)(roomNumber=*66))
nsViewFilter: (&(objectClass=inetOrgPerson)(roomNumber=*66))
您应该使用 相等索引 (默认情况下为 )和 roomNumber
(带有 子字符串索引)进行索引。
先决条件
- 您已了解您在视图过滤器中使用的属性。
流程
可选:列出后端以确定要索引的数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsconf -D "cn=Directory Manager" instance_name backend suffix list
# dsconf -D "cn=Directory Manager" instance_name backend suffix list dc=example,dc=com (userroot)
请注意所选的数据库名称(在括号中)。
使用
dsconfig
实用程序为所选后端数据库创建索引配置。指定属性 name, index type, 以及可选的匹配规则来设置 collation order (OID),特别是在国际化实例时。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsconf -D "cn=Directory Manager" instance_name backend index add --attr roomNumber --index-type sub userroot
# dsconf -D "cn=Directory Manager" instance_name backend index add --attr roomNumber --index-type sub userroot
对 view 过滤器中使用的每个属性重复此步骤。
重新索引数据库以应用新的索引:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dsconf -D "cn=Directory Manager" instance_name backend index reindex userroot
# dsconf -D "cn=Directory Manager" instance_name backend index reindex userroot
验证
执行基于您在视图中使用的相同过滤器的标准目录树的搜索:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b dc=example,dc=com (&(objectClass=inetOrgPerson)(roomNumber=*66)) ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b dc=example,dc=com "(&(objectClass=inetOrgPerson)(roomNumber=*66))"
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b dc=example,dc=com (&(objectClass=inetOrgPerson)(roomNumber=*66)) # ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b dc=example,dc=com "(&(objectClass=inetOrgPerson)(roomNumber=*66))"
查看
/var/log/dirsrv/slapd-instance_name/ access 中的访问日志
。搜索的
RESULT
在详情中不应包含note=U
或Partially Unindexed Filter
。
其他资源