第 13 章 管理索引


通过索引(索引)通过对属性或值进行分类和检索信息,可以更轻松地搜索和检索信息。本章描述了搜索算法本身,将索引机制放在上下文中,然后描述了如何创建、删除和管理索引。

13.1. 关于索引

本节概述目录服务器中的索引。它包含以下主题:

13.1.1. 关于索引类型

索引存储在目录数据库中的文件中。文件的名称基于 indexed 属性,而不是文件中包含的索引类型。如果为特定属性维护多个索引,每个索引文件可以包含多个索引类型。例如,为 common name 属性维护的所有索引都包含在 cn.db 文件中。
目录服务器支持以下类型的索引:
  • 存在索引(pres) 包含包含特定属性的条目列表,这对于搜索非常有用。例如,可以轻松地检查包含访问控制信息的任何条目。生成包含存在索引的 aci.db 文件会有效地执行 ACI = the 搜索,以便为服务器生成访问控制列表。
  • 平等索引(eq) 改进了对包含特定属性值的条目的搜索。例如,cn 属性上的相等索引允许用户更有效地执行 cn=Babs Jensen 的搜索。
  • 大约索引(approx) 用于 高效的类似声音或声音 的搜索。例如,条目可能包含属性值 cn=Firstname M Lastname。大约搜索将返回针对 cn~=Firstname Lastname, cn~=Firstname, or cn~=Lastname 进行搜索的值。同样,对 l~=San Fransisco 的搜索会返回包括 l=San the 的条目。
  • 子字符串 索引(sub) 是维护的成本索引,但它可以有效地搜索条目中的子字符串。子字符串索引仅限于每个条目至少有三个字符。
    例如,搜索 cn=*derson ,它会匹配包括如 Bill Anderson, Jill Henderson, 或 Steve Sanderson 字符串的常规名称。同样,搜索 telephoneNumber= *555* 会返回目录中包含 555 的电话号码的所有条目。
  • 国际索引 加快了搜索国际目录中的信息。创建国际索引的过程与创建常规索引的过程类似,不同之处是它会应用一个匹配规则,它将一个 对象标识符 (OID) 与要索引的属性关联。
    附录 D, 国际化 中列出了支持的区域设置及其关联的 OID。如果需要配置目录服务器以接受其他匹配规则,请联系红帽咨询。

13.1.2. 关于默认和数据库索引

目录服务器包含一组默认索引。创建新数据库时,Directory 服务器会将这些默认索引从 cn=default index,cn=config,cn=ldbm database,cn=plugins,cn=config 复制到新数据库。然后,数据库只使用这些索引的副本,它们存储在 cn=index,cn=database_name,cn=ldbm database,cn=plugins,cn=config 中。
注意
目录服务器不会复制 cn=config 条目中的设置。因此,您可以在作为复制拓扑一部分的服务器上配置索引。例如,在使用级联复制的环境中,如果客户端不需要从 hub 读取数据,则不需要在 hub 上创建自定义索引。
显示目录服务器默认索引:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com \
     -b "cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config" \
     '(objectClass=nsindex)'
Copy to Clipboard Toggle word wrap
注意
如果您更新存储在 cn=default index ,cn=config,cn=ldbm database,cn=plugins,cn=config 里的默认索引 设置,则更改不会应用到 cn=index,cn=database_name,cn=ldbm database,cn=plugins,cn=config
显示单个数据库的索引:
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend index list database_name
Copy to Clipboard Toggle word wrap

13.1.3. 搜索算法概述

索引用于加快搜索速度。要了解目录如何使用索引,它有助于理解搜索算法。每个索引包含一个属性列表(如 cn、通用名称、属性)以及包含索引属性值的条目的 ID 列表:
  1. LDAP 客户端应用程序向目录发送搜索请求。
  2. 目录检查传入请求,以确保指定的基本 DN 与一个或多个数据库或数据库链接中包含的后缀匹配。
    • 如果匹配,目录会处理请求。
    • 如果不匹配,目录会向客户端返回错误,表示后缀不匹配。如果在 cn=config 下的 nsslapd-referral 属性中指定引用,则目录也会返回 LDAP URL,客户端可以尝试识别请求。
    • 目录服务器检查搜索过滤器以查看应用什么索引,它会尝试从满足过滤器的每个索引中加载条目 ID 列表。ID 列表会根据过滤器是否使用 AND 或 OR 加入来合并。
      每个过滤器组件都独立处理,并返回 ID 列表。
    • 如果条目 ID 列表大于配置的 ID 列表扫描限制,或者没有为属性定义索引,则 Directory 服务器会将此 filtercomponent 的结果设置为 allids。如果对单个搜索组件的结果应用逻辑操作后,列表仍然是 ALLIDs,它会在数据库中搜索每个条目。这是一个 未索引的 搜索。
  3. Directory 服务器从 id2entry.db 数据库读取每个条目,或 ID 列表中每个条目 ID 的条目缓存(或从整个数据库中为未索引搜索的整个数据库读取条目缓存)。然后,服务器会检查条目以查看它们是否与搜索过滤器匹配。每个匹配项都会在找到时返回。
    服务器会继续 ID 列表,直到它搜索所有候选条目或直到它达到配置的资源限值之一。(资源限值在 第 14.5.3 节 “使用命令行设置用户和全局资源限值” 中列出。)
    注意
    可以设置单独的资源限值,以使用简单页面的结果控制进行搜索。例如,管理员可以通过页面搜索设置高或无限大小并查找限制,但对非页搜索使用较低的默认限值。

13.1.4. 大约搜索

此外,目录使用 metaphone phonetic 算法的变体对大约索引执行搜索。每个值都被视为单词序列,为每个单词生成手机代码。
注意
目录服务器中的元手机算法只支持 US-ASCII 字母。因此,只使用带有英语值的大约索引。
在大约搜索中输入的值将转换为一系列手机代码。如果这两个条目都为 true,则考虑与查询匹配:
  • 所有查询字符串代码都与条目字符串中生成的代码匹配。
  • 所有查询字符串代码都与条目字符串代码相同。
Expand
目录(电话代码)中的名称. 查询字符串(电话代码) 匹配评论
alice B Sarette (ALS B SRT) alice Sarette (ALS SRT) 匹配.代码以正确顺序指定。
Alice Sarrette (ALS SRT) 匹配.代码以正确顺序指定,尽管 Sarette 拼写错误。
Surette (SRT) 匹配.生成的代码存在于原始名称中,尽管 Sarette 拼写错误。
Bertha Sarette (BR0 SRT) 无匹配项。代码 BR0 不在原始名称中。
Sarette, alice (SRT ALS) 无匹配项。代码没有以正确顺序指定。

13.1.5. 平衡索引的好处

在创建新索引前,平衡维护对成本的索引的好处。
  • 大约索引对于通常包含数字的属性(如电话号码)无效。
  • 子字符串索引不适用于二进制属性。
  • 如果值为大(如用于包含加密数据的照片或密码)的值,则应避免相等索引。
  • 在不提高全局搜索性能的情况下,维护搜索中常用的属性索引会增加开销。
  • 不索引的属性仍可在搜索请求中指定,但搜索性能可能会显著降级,具体取决于搜索类型。
  • 维护的更多索引,所需磁盘空间越多。
索引可能会变得非常耗时。例如:
  1. Directory 服务器接收添加或修改操作。
  2. 目录服务器检查索引属性,以确定是否为属性值维护索引。
  3. 如果创建属性值被索引,则 Directory 服务器从索引中添加或删除新属性值。
  4. 实际属性值在条目中创建。
例如,Directory 服务器添加该条目:
dn: cn=John Doe,ou=People,dc=example,dc=com
objectclass: top
objectClass: person
objectClass: orgperson
objectClass: inetorgperson
cn: John Doe
cn: John
sn: Doe
ou: Manufacturing
ou: people
telephoneNumber: 408 555 8834
description: Manufacturing lead for the Z238 line of widgets.
Copy to Clipboard Toggle word wrap
目录服务器维护以下索引:
  • cn (common name)和 sn (surname)属性的平等、大约和子字符串索引。
  • 为电话号码属性相等和子字符串索引。
  • description 属性的子字符串索引。
将该条目添加到目录中时,目录服务器必须执行以下步骤:
  1. JohnJohn Doe 创建 cn equality 索引条目。
  2. JohnJohn Doe 创建适当的 cn approximate index 条目。
  3. JohnJohn Doe 创建适当的 cn 子字符串索引条目。
  4. Doe 创建 sn equality 索引条目。
  5. Doe 创建适当的 sn approximate 索引条目。
  6. Doe 创建适当的 sn 子字符串索引条目。
  7. 408 555 8834 创建电话号码相等索引条目。
  8. 408 555 8834 创建适当的电话号码子字符串索引条目。
  9. 小部件的 Z238 行 创建适当的 description 子字符串索引条目。为此字符串生成了大量子字符串条目。
如本例所示,为大型目录创建和维护数据库所需的操作数量可能是资源密集型。

13.1.6. 索引限制

您不能索引虚拟属性,如 nsrolecos_attribute。虚拟属性包含计算的值。如果您索引了这些属性,Directory 服务器可以返回一组无效的条目来直接和内部搜索。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat