第 6 章 在目录服务器中管理索引
索引通过分类和组织属性或值来更快地搜索和检索信息。您可以使用虚拟列表视图控制来请求大型搜索结果的连续子集。
6.1. 关于索引 复制链接链接已复制到粘贴板!
了解目录服务器中的索引类型,以及使用索引时的加号和减去。
6.1.1. 不同的索引类型 复制链接链接已复制到粘贴板!
目录服务器将每个索引属性的索引存储在实例的数据库目录中单独的数据库文件。例如,sn
属性的索引存储在 /var/lib/dirsrv/slapd- <instance_name> /db/database_name/sn.db
文件中。如果目录服务器为属性维护不同的索引,则每个索引文件可以包含多个索引类型。
目录服务器支持以下索引类型:
-
存在
索引(前
)是包含特定属性的条目列表。例如,当客户端频繁执行搜索时使用此类型,如attribute=mail
。 -
相等索引(
eq
)改进了搜索包含特定属性值的条目。例如,cn
属性上的相等索引可以更快地搜索cn=first_name last_name
。 -
大约索引(
approx
)可以实现有效的大约或声音的搜索。例如,搜索cn~=first_name last_name
,cn~=first_name
, 或cn~=first_nam
(请注意拼写错误)将返回条目cn=first_name X last_name
。请注意,目录服务器中的元手机算法只支持 US-ASCII 字母。因此,只使用带有英语值的大约索引。 -
子字符串索引(
sub
)是一个昂贵的索引来维护,但它可提高对条目中子字符串进行有效的搜索。子字符串索引仅限于每个条目至少三个字符。例如,搜索telephoneNumber swig555*
返回目录中所有条目,其值为telephoneNumber
属性中包含555
的值。 - 国际索引可加快在国际目录中搜索信息。创建国际索引的过程与创建常规索引的过程类似,但它通过关联对象标识符(OID)和要索引的属性来应用匹配的规则。
6.1.2. 平衡索引的好处 复制链接链接已复制到粘贴板!
在创建新索引前,平衡维护索引对成本的好处:
- 大约索引对于通常包含数字的属性(如电话号码)无效。
- 子字符串索引不适用于二进制属性。
- 避免对包含大型值(如镜像)的属性上相等索引。
- 在不提高搜索性能的情况下,为搜索中常用的属性维护索引会增加开销。
- 未索引的属性仍可在搜索请求中使用,但搜索性能可能会显著降级,具体取决于搜索类型。
索引可能会变得非常耗时。例如,如果 Directory 服务器收到 add 操作,服务器会检查索引属性,以确定是否为属性值维护索引。如果创建属性值被索引,Directory 服务器会将新属性值添加到索引中,然后在条目中创建实际属性值。
例 6.1. 当用户添加条目时,Directory 服务器执行
假设目录服务器维护以下索引:
-
cn
和sn
属性的相等、大约和子字符串索引。 -
telephoneNumber
属性的相等和子字符串索引。 -
description
属性的子字符串索引。
例如,用户添加以下条目:
当用户添加条目时,Directory 服务器执行以下步骤:
-
为
John
和John Doe
创建cn
equality 索引条目。 -
为
John
和John Doe
创建cn
approximate index 条目。 -
为
John
和John Doe
创建cn
子字符串索引条目。 -
为
Doe
创建sn
equality 索引条目。 -
为
Doe
创建sn
approximate index 条目。 -
为
Doe
创建sn
子字符串索引条目。 -
为
408 555 8834
创建telephoneNumber
equality 索引条目。 -
为
408 555 8834
创建telephoneNumber
子字符串索引条目。 -
为
制造领导
创建description
子字符串索引条目。
本例演示了为大型目录创建和维护数据库所需的操作数量可能会非常大量资源。
不要为成员资格属性(如成员、unique
)定义子字符串索引,因为它可能会影响目录服务器性能。在添加或删除成员时,例如,对于具有多个成员的组的唯一成员,则 member
唯一成员
子字符串索引的计算需要评估所有 唯一成员
值,而不只是添加或删除值。