元数据导航和筛选
上次修改时间: 2015年3月9日
适用范围: SharePoint Server 2010
本文内容
元数据导航和筛选
提示
元数据导航和筛选的可编程性
元数据导航和筛选提供一种按项元数据筛选 Microsoft SharePoint Server 2010 列表视图的方法。列表所有者可以使用此功能将列表上的字段提升为关键导航字段,并且查看这些列表的用户会看到一个筛选用户界面 (UI),这些用户可通过该界面对当前列表视图进行筛选以显示在这些字段中具有所需值的项。元数据导航和筛选使用列表级索引以支持无缝的浏览体验 — 即使在包含数千万个项的非常大的列表中。此功能通过确保当项在多个字段中带有适当标记时,这些项比未带标记的列表视图项更易于被检测到,提升对元数据和标记的使用。
元数据导航和筛选
元数据导航和筛选包括:
用于基于列表项元数据浏览和筛选列表视图的新用户界面。
根据提升为列表中的导航字段的字段自动创建列表索引的过程。
尽可能为运行的查询选择最佳索引以避免列表视图限制的过程。
新用户界面
新用户界面包括导航层次结构和密钥筛选器:
导航层次结构是在用户查看父列表时显示在树视图中的字段。与文件夹结构一样,可浏览此类字段中的值,也可单击值查看匹配对应值的文档。与好的文件夹结构一样,一个合适的导航层次结构字段将内容分成几个易于管理的区块。
密钥筛选器是显示在树级别下方的字段。它们是可帮助您缩小当前视图中的内容范围的补充筛选器。
自动索引创建
在列表的"元数据导航设置"页上,您还可以指定是否自动在列表上创建索引以匹配当前选定的导航层次结构和密钥筛选器字段。如果启用此设置(默认情况下在列表上创建索引),当保存元数据导航设置页时:
在所有支持的密钥筛选器字段上创建单列索引,内容类型字段和选项字段除外。
在导航层次结构和密钥筛选器的所有支持的组合上创建复合索引。
对于大多数方案,建议保留指定是否自动在列表上创建索引以匹配当前选定的导航层次结构和密钥筛选器字段设置的设置,因为如果某个列表上未创建索引,则对该列表的每个查询都是未索引查询。Microsoft SharePoint Server 2010 中不支持针对大型列表或针对包含的项数超过网站的列表视图查询阈值中定义的数量的列表的未索引查询。在某些高级方案中,可能适合关闭此设置并手动配置索引。重要注意事项包括:
SharePoint Server 2010 支持每个列表最多 20 个索引。如果这种包含 20 个索引的空间不足,则元数据导航和筛选无法为选定的导航层次结构和密钥筛选器字段的所有有效组合创建索引。
当位于大型列表中时,禁止在大型列表中创建新索引,除非您是服务器场管理员或正在服务窗口中操作。
索引类型和支持的字段
表 1 汇总可参与元数据导航的字段类型及参与容量。
表 1. 可参与元数据导航的字段类型
字段类型 |
作为导航层次结构受支持? |
作为密钥筛选器受支持? |
支持单列索引? |
支持复合索引? |
---|---|---|---|---|
内容类型 |
是 |
是 |
是 |
是 |
选择(单值) |
是 |
是 |
是 |
否 |
托管元数据(单值) |
是 |
是 |
是 |
是 |
托管元数据(多值) |
是 |
是 |
是* |
否 |
个人或组(单值) |
否 |
是 |
是 |
是 |
个人或组(多值) |
否 |
是 |
否 |
否 |
日期和时间 |
否 |
是 |
是 |
是 |
数字 |
否 |
是 |
是 |
是 |
备注
*多值查找字段自动按其在数据库中的存储方式编制索引,因此不受 20 个索引的限制。但是,它们不能参与复合索引。
带索引的查询
元数据导航和筛选在每次加载列表视图时尽量使最有益的索引起作用。每当用户加载列表视图时,或者通过应用新筛选器、清除筛选器、在字段上应用排序,刷新列表视图时,后台总会存在某种逻辑,用于检查请求并确定可避免大型列表限制的数据库查询方法。这并不总是那么简单易行;一个查询的运行方法可能有多种,而且每种方法可能会生成不同的结果。该过程运行方式如下:
当用户导航到一个列表视图页或刷新列表视图时,该页将针对列表运行协作应用程序标记语言 (CAML) 查询以获取显示在"列表视图 Web 部件"中的项。此查询可以包含一个或多个来自导航层次结构中的选定值的筛选器、一个或多个密钥筛选器选择项、一个或多个在视图定义中指定的筛选器,或一个或多个在"列表视图 Web 部件"的列筛选器中指定的筛选器。如果当前列表很大,则此 CAML 查询可能会引发 SPThrottledQueryException,这意味着此查询不具选择性。也就是说,此查询在数据库中检查的项数比管理员定义的列表视图查询阈值要多。如果遇到此异常,则执行步骤 2 和后续步骤。
元数据导航检查 CAML 查询中的每个筛选操作(或子句),并确定哪些操作在可用于满足相应筛选操作的列表上创建有对应的索引。例如,如果"ModifiedBy"列上带有一个索引,并且当前列表视图对"修改者"列进行筛选,则查询可能使用该索引。
对于每个这些有效的索引/筛选器组合,元数据导航重写当前 CAML 查询以使用该索引。
然后,元数据导航和筛选尝试运行每个这些带索引的查询,直至找到一个未生成 SPThrottledQueryException 的查询。如果所有查询都导致出现此异常,则它构造并执行回退查询。
备注
默认情况下,在 SharePoint Server 2010 中创建的大多数网站上启用元数据导航和筛选。无论是否已实际配置此功能,都会为这些网站中的每个列表运行此过程。
回退查询
如果元数据导航和筛选确定当前用户请求无法表示为具有选择性的带索引查询,则它将构造并执行回退查询。回退查询是原始用户查询的修改版本,它只查询一部分列表,而不是整个列表。回退查询旨在向用户显示有用的部分结果集,即使当原始查询因大型列表限制而未能运行时。回退查询还可作为发送给列表所有者的警告,通知列表中的数据分布不均衡,并且用户正在运行的某些查询不能返回完整结果集,这意味着可能会阻止用户访问他们需要的内容。如果查询扫描的部分列表中的任何项都不包含匹配原始用户查询的结果,则回退查询有时返回 0 结果。
由于回退查询的结果只是用户正在请求的部分项集合,因此屏幕上的消息会提示用户他或她正在查看的只是部分结果集,必须应用其他筛选器才能查看完整集合。每次用户指定另一个筛选器时,查询引擎就有另一次机会查找不会导致出现 SPThrottledQueryException 的选择性筛选器/索引组合。以下是按优先顺序排列的两种回退查询类型:带索引的回退查询和简单回退查询。
**带索引的回退查询。**这种类型的回退查询处理列表上的其中一个索引,并检查匹配该索引中的已筛选值的 N 个最近创建的项。若要使用带索引的回退查询语义,用户查询必须在索引列上有一个筛选器,并且筛选器/索引组合必须满足某些附加约束。只有表 2 中列出的筛选器/索引组合类型才可以参与带索引的回退查询:
表 2. 回退查询中允许的筛选器/索引组合
索引类型
支持索引回退的查询
内容类型
一个值
选择(单值)
一个值
托管元数据(单值)
一个值
多个值
托管元数据(多值)
一个值
多个值
个人或组(单值)
一个值
日期和时间
一个值
一组值
数字
一个值
一组值
托管元数据(单值),与日期和时间复合索引
托管元数据列上的一个值
日期和时间列上的一个值或一组值
托管元数据(单值),与数字复合索引
托管元数据列上的一个值
数字列上的一个值或一组值
托管元数据(单值),与内容类型复合索引
托管元数据列上的一个值
内容类型列上的一个值
托管元数据(单值),与个人或组的复合索引
托管元数据列上的一个值
个人或组列上的一个值
内容类型,与日期和时间复合索引
内容类型列上的一个值
日期和时间列上的一个值或一组值
内容类型,与数字复合索引
内容类型列上的一个值
数字列上的一个值或一组值
内容类型,与个人或组复合索引
内容类型列上的一个值
个人或组列上的一个值
备注
在表 2 中,"一个值"代表可使用 CAML 中的子句表示的筛选器,如 10。"多个值"代表可使用 CAML 中的子句表示的筛选器,如 1011。"一组值"代表可使用 CAML 中的子句表示的筛选器,如 2010-02-04T08:00:00Z。
对于某些带索引的组合,如果查询未采用指定的格式,则不能使用带索引的回退查询。例如,如果单值分类字段和日期字段上存在复合索引,而用户查询在 CAML 子句中包含分类字段中的多个值,则将运行简单回退查询,而不是带索引的查询。
**简单回退查询。**不具有支持索引回退的索引筛选子句的查询必须运行简单回退查询。简单回退查询操作列表中前 N 个最近创建的项。如果这 N 个项都不匹配用户查询中的查询参数,则不返回任何结果。
备注
在带索引的回退查询和简单回退查询中,"N"表示(列表视图查询阈值 * .20)。列表视图查询阈值可由管理器进行配置,但 .20 乘数无法改变。
提示
元数据导航最适合在托管元数据字段中使用;这些字段的稳定性、层次结构和采纳性使得将列表内容分成易于管理的区块非常有效。
可在列表视图页上使用开发人员面板,并通过元数据导航查看针对一个用户查询运行的每个索引查询和回退查询后的 CAML 和 SQL。
有些管理员可能希望将回退查询视为警告,表明列表中的数据在索引和字段值之间分配不合理,需要重新分发某些数据,以便列表的用户可以访问其所需的文档。如果启用详细日志记录,则每次执行回退查询时将写入 ULS 日志条目。可以制定运行状况规则以截获这些日志条目,并向管理员显示一条警告,通知正在执行此操作以便可以采取措施。
元数据导航和筛选的可编程性
元数据导航和筛选的对象模型主要位于 Microsoft.Office.DocumentManagement.MetadataNavigation 命名空间中。它包括以下类型。
表 3. 元数据导航和筛选的编程模型
类型 |
说明 |
---|---|
在 HTTP 请求过程中跟踪元数据导航控件和列表视图 Web 部件的状态。 |
|
表示 MetadataNavigationItem 对象的层次结构。 |
|
表示与 MetadataNavigationHierarchy 对象关联的 SPItem 对象。 |
|
表示用于将元数据导航筛选为有意义的可行子集的密钥筛选器。 |
|
配置 SPList 对象上的 MetadataNavigationItem 对象的哪些设置控制元数据层次结构和筛选器在列表视图上的显示。 |