8.4. 使用视图
虚拟目录树视图 或查看,创建虚拟目录层次结构,因此可以轻松地浏览条目,而无需确保这些条目在任何特定位置都存在。视图使用有关条目的信息将其放在视图层次结构中,类似于过滤的角色的成员或动态组。查看一组条目上的 DIT 层次结构,以及客户端应用程序,视图显示为普通容器层次结构。
8.4.1. 关于视图
视图创建类似于常规层次结构的目录树,例如为子树使用机构单元条目,但查看条目有一个额外的对象类(
nsview
)和一个过滤器属性(nsviewfilter
),用于为属于该视图中的条目设置过滤器。添加 view 容器条目后,与 view 过滤器匹配的所有条目都会立即填充视图。在视图中仅显示目标条目,目标条目的真正位置永远不会更改。例如,可以将视图创建为 ou=Location Views,并为 l=Mountain View 设置过滤器。每个条目(如 cn=Jane Smith,l=Mountain View,ou=People,dc=example,dc=com )都立即列在 ou=Location Views 条目下,但实际 cn=Jane Smith 条目保留在 ou=People,dc=example,dc=com 子树中。
图 8.4. 带有虚拟 DIT 视图层次结构的目录树
虚拟 DIT 视图的行为类似于使用预期结果执行子树或一次性搜索的普通 DIT。
注意
有一个示例 LDIF 文件,它带有示例视图条目
Example-views.ldif
,与 Directory Server 一起安装。此文件位于 /usr/share/dirsrv/data/
目录中。本章的章节假定 Example-views.ldif
导入到服务器。
红帽目录服务器部署指南 提供了有关 如何将视图与目录树层次结构集成的更多信息。
8.4.2. 从命令行创建视图
- 使用 ldapmodify 实用程序绑定到服务器,并准备好将其添加新视图条目到配置文件中。
- 假设
Example-views.ldif
文件中的 view container ou=Location Views,dc=example,dc=com 位于 Directory 服务器中,在本例中为 dc=example,dc=com root 后缀下添加新的视图容器条目。此条目必须具有 nsview 对象类和nsViewFilter
属性。nsViewFilter
属性设置 attribute-value,用于标识属于视图中的条目。dn: ou=Mountain View,ou=Location Views,dc=example,dc=com changetype: add objectClass: top objectClass: organizationalUnit objectClass: nsview ou: Mountain View nsViewFilter: l=Mountain View description: views categorized by location
8.4.3. 提高视图性能
作为 第 8.4.1 节 “关于视图” 描述,根据给定的过滤器从搜索结果中派生视图。过滤器的一部分是
nsViewFilter
属性中定义的属性;过滤器的其余部分基于条目层次结构,查找视图中包含的实际条目的 entryid
和 parentid
。
(|(parentid=search_base_id)(entryid=search_base_id)
如果任何 search-for 属性 -
entryid
、parentid
或 nsViewFilter
中设置的属性没有索引,则视图搜索将变为不索引的搜索,因为 view 操作搜索整个树以获取匹配的条目。
要提高视图性能,请为
entryid
、parentid
和 nsViewFilter
中设置的属性创建相等的索引。
第 13.2 节 “创建标准索引” 中涵盖了创建相等的索引,并在 第 13.3 节 “为现有数据库创建新索引” 中涵盖更新现有索引使其包含新属性。