通过搜索属性列表来搜索文档属性

文档属性的内容以前与文档正文的内容不区分。 该限制将全文搜索限制为对整个文档进行普通查询。 但是,现在,你可以配置全文索引,以支持在varbinaryvarbinary(max)(包括FILESTREAM)或image二进制数据列中对支持的文档类型进行属性范围搜索,特定属性如作者和标题。 这种形式的搜索称为 属性搜索

关联的 筛选器 (IFilter) 确定是否可以在特定类型的文档上搜索属性。 对于某些文档类型,关联的 IFilter 提取为该类型文档定义的部分或全部属性,以及文档正文的内容。 可以将全文索引配置为仅支持对 IFilter 在全文索引期间提取的属性进行属性搜索。 在能够提取许多文档属性的 IFilters 中,包括用于 Microsoft Office 文档类型的 IFilters(例如 .docx、.xlsx和 .pptx)。 另一方面,XML IFilter 不会发出属性。

Full-Text 搜索如何与搜索属性协同工作

内部属性ID

Full-Text 引擎任意为每个已注册的属性分配一个内部属性 ID,该 ID 唯一标识该特定搜索列表中的属性,以及特定于该搜索属性列表的属性。 因此,如果将属性添加到多个搜索属性列表,则其内部属性 ID 可能在不同的列表之间有所不同。

为搜索列表注册属性时,Full-Text 引擎会任意向属性分配 内部属性 ID 。 内部属性 ID 是一个整数,用于唯一标识该搜索属性列表中的属性。

下图显示了搜索属性列表的逻辑视图,该列表指定两个属性:Title 和 Keywords。 关键字的属性列表名称为“Tags”。 这些属性属于同一属性集,其 GUID 为 F29F85E0-4FF9-1068-AB91-08002B27B3D9。 属性整数标识符中,2 表示标题,5 表示标签(关键字)。 Full-Text 引擎会随机地将每个属性映射为专属于搜索属性列表的内部属性 ID。 Title 属性的内部属性 ID 为 1,Tags 属性的内部属性 ID 为 2。

将搜索属性列表映射到内部表

内部属性 ID 可能不同于属性的整数标识符。 如果为多个搜索属性列表注册给定属性,则可能会为每个搜索属性列表分配不同的内部属性 ID。 例如,内部属性 ID 在一个搜索属性列表中可能是 4,在另一个列表中可能是 1,在再另一个中可能是 3,依此类推。 与此相反,属性整数标识符是属性固有的,无论使用属性在哪里,它都保持不变。

注册财产的索引

在全文索引与搜索属性列表关联后,必须重新生成索引以对特定属性的搜索词进行索引。 在全文索引期间,所有属性的内容都与其他内容一起存储在全文索引中。 但是,在注册的属性中为搜索词编制索引时,全文索引器还会存储具有该术语的相应内部属性 ID。 相比之下,如果未注册某个属性,则它将存储在全文索引中,就好像它是文档正文的一部分一样,并且内部属性 ID 的值为零。

下图显示了与上图中显示的搜索属性列表相关联的全文索引中的搜索词的逻辑视图。 文档 1 示例文档包含三个属性:Title、Author 和 Keywords,以及文档正文。 对于在搜索属性列表中指定的属性“标题”和“关键字”,搜索词与全文索引中的相应内部属性 ID 相关联。 相比之下,Author 属性的内容会被索引处理,就像它是文档正文的一部分一样。 这意味着注册属性会增加全文索引的大小,具体取决于属性中存储的内容量。

使用搜索属性列表的全文索引

在 Title 属性中,搜索词“Favorite”、“Biking”和“Trails”与分配给该索引中 Title 的内部属性 ID 1 相关联。 关键字属性“biking”和“mountain”中的搜索词与分配给此索引的 Tags 的内部属性 ID 相关联,即 2。 对于在 Author 属性中的搜索词-“Jane”和“Doe”-以及在文档正文中的搜索词,内部属性 ID 为 0。 请注意,术语“biking”出现在标题属性、关键词(标签)属性和文档正文中。 在 Title 或 Keywords(Tags)属性中搜索“biking”,此文档将出现在搜索结果中。 针对“biking”的一般全文查询会返回此文档,就如同索引没有被配置用于属性搜索一样。 在 Author 属性中搜索关键字“骑行”不会显示本文件。

属性范围内的全文查询使用在全文索引的当前搜索属性列表中注册的内部属性ID。

启用房产搜索的影响

配置全文索引以支持搜索一个或多个属性会根据你在搜索属性列表中指定的属性数以及每个属性的内容增加索引的大小。

在测试Microsoft Word?、Excel和 PowerPoint 文档的典型语料库时,我们配置了全文索引来为典型搜索属性编制索引。 为这些属性编制索引会将全文索引大小的大小增加大约 5%。 我们预计,对于大多数文档库来说,此大致大小增加将是典型的。 但是,最终,文档大小的增加将取决于给定语料库中属性数据量相对于总体数据量的比例。

创建搜索属性列表并启用属性搜索

创建搜索属性列表

使用 Transact-SQL 创建搜索属性列表

使用 CREATE SEARCH PROPERTY LIST (Transact-SQL) 语句时,至少要提供该列表的名称。

在 Management Studio 中创建搜索属性列表
  1. 在对象资源管理器中,展开服务器。

  2. 展开数据库,然后展开要在其中创建搜索属性列表的那个数据库。

  3. 展开存储,然后右键单击搜索属性列表

  4. 选择 “新建搜索属性”列表

  5. 指定属性列表名称。

  6. (可选)将其他人指定为属性列表所有者。

  7. 选择以下任一选项:

    • 创建空的搜索属性列表

    • 从现有搜索属性列表创建

    有关详细信息,请参阅 “新建搜索属性列表”。

  8. 单击 “确定”

将属性添加到搜索属性列表

属性搜索需要创建 搜索属性列表 ,并指定要进行搜索的一个或多个属性。 向搜索属性列表添加属性时,将为该特定列表注册该属性。 若要将属性添加到搜索属性列表,需要以下值:

  • 属性集 GUID

    每个搜索属性属于包含一组相关属性的单个属性集。 每个属性集由全局唯一标识符(GUID)标识。

  • 属性整数标识符

    每个搜索属性都具有属性集中唯一的标识符。 请注意,对于给定属性,标识符可以是整数或字符串,但全文搜索仅支持整数标识符。

  • 属性名称

    这是用户在全文查询中指定要搜索属性的名称。 属性名称可以包含内部空格。 最大长度为 256 个字符。

    属性名称可以是以下任一项:

    • 属性的 Windows 规范名称,例如 System.AuthorSystem.Contact.HomeAddress

    • 用户友好的名称,便于用户记住。 某些属性与已知的用户友好名称(如“Author”或“Home Address”)相关联,但你可以指定最适合用户的任何名称。

    注释

    属性集 GUID 和属性标识符的给定组合在给定的搜索属性列表中必须是唯一的。 这意味着不能多次添加具有相同名称或说明的属性。

  • 属性说明(可选)

    将搜索属性添加到搜索属性列表时,可以提供可选说明。 例如,你可能想要提供有关属性名称中不明显的属性的信息,或者你可能想要描述属性的属性集。

获取搜索属性列表的值

有关查找搜索属性的属性集 GUID 和属性整数 ID的信息,请参阅。

使用 Transact-SQL 将属性添加到搜索属性列表

ALTER SEARCH PROPERTY LIST (Transact-SQL) 语句与通过使用主题中所述的方法之一获取的值一起使用, 查找搜索属性的属性集 GUID 和属性整数 ID

以下示例演示将属性添加到搜索属性列表时使用这些值:

ALTER SEARCH PROPERTY LIST DocumentTablePropertyList  
   ADD 'Title'  
   WITH ( PROPERTY_SET_GUID = 'F29F85E0-4FF9-1068-AB91-08002B27B3D9', PROPERTY_INT_ID = 2,   
      PROPERTY_DESCRIPTION = 'System.Title - Title of the item.' );  

将属性添加到 Management Studio 中的搜索属性列表

使用 “搜索属性列表属性 ”对话框可以添加和删除搜索属性。 可以在关联数据库的存储节点下的对象资源管理器中找到搜索属性列表

将搜索属性列表与 Full-Text 索引相关联

要使全文索引支持对为搜索属性列表注册的属性进行属性搜索,需要将搜索属性列表与索引相关联并重新填充索引。 重新填充全文索引会为每个已注册属性中的搜索词创建特定于属性的索引条目。

只要全文索引仍与此搜索属性列表关联,全文查询就可以使用 CONTAINS 谓词的 PROPERTY 选项搜索为该搜索属性列表注册的属性。

如果更改与全文索引关联的搜索属性列表,则必须重新生成索引才能使其处于一致状态。 索引会立即截断,并在索引完全填充完成之前保持为空。 有关更改搜索属性列表导致重新生成索引的详细信息,请参阅 ALTER FULLTEXT INDEX (Transact-SQL)中的“备注”。

将搜索属性列表与 Transact-SQL 的全文索引相关联

使用 ALTER FULLTEXT INDEX (Transact-SQL) 语句和 SET SEARCH PROPERTY LIST = <property_list_name> 子句。

将搜索属性列表与 Management Studio 的全文索引相关联

Full-Text“索引属性”对话框的“常规”页上指定搜索属性列表的值。

使用 CONTAINS 查询搜索属性

属性范围的全文查询的基本 CONTAINS 语法如下所示:

SELECT column_name FROM table_name  
  WHERE CONTAINS ( PROPERTY ( column_name, 'property_name' ), '<contains_search_condition>' )  

例如,以下查询在数据库AdventureWorks的表Production.Document的列Document中搜索索引属性Title。 查询仅返回属性 Title 中包含字符串 MaintenanceRepair 的文档。

USE AdventureWorks  
GO  
SELECT Document FROM Production.Document  
  WHERE CONTAINS ( PROPERTY ( Document, 'Title' ), 'Maintenance OR Repair')  
GO  

此示例假定文档的 IFilter 提取其 Title 属性,将 Title 属性添加到搜索属性列表中,并且搜索属性列表与全文索引相关联。

管理搜索属性列表

查看和更改搜索属性列表

使用 Transact-SQL 更改搜索属性列表

使用 ALTER SEARCH PROPERTY LIST (Transact-SQL) 语句添加或删除搜索属性。

在 Management Studio 中查看和更改搜索属性列表
  1. 在对象资源管理器中,展开服务器。

  2. 展开 数据库,然后展开该数据库。

  3. 展开 存储

  4. 展开 “搜索属性列表 ”以显示搜索属性列表。

  5. 右键单击属性列表,然后选择“ 属性”。

  6. “搜索属性列表编辑器 ”对话框中,使用“属性”网格添加或删除搜索属性:

    1. 若要删除文档属性,请单击属性左侧的行标题,然后按 DEL。

    2. 若要添加文档属性,请在列表底部的空行中单击 *右侧,然后输入新属性的值。

      有关这些值的信息,请参阅 “搜索属性列表编辑器”。 有关如何获取由 Microsoft 定义的属性的这些值的信息,请参阅查找搜索属性的属性集 GUID 和属性整数 ID。 有关独立软件供应商(ISV)定义的属性的信息,请参阅该供应商的文档。

  7. 单击 “确定”

删除搜索属性列表

当列表与任何全文索引关联时,无法从数据库中删除属性列表。

使用 Transact-SQL 删除搜索属性列表

使用 DROP SEARCH PROPERTY LIST (Transact-SQL) 语句。

在 Management Studio 中删除搜索属性列表
  1. 在对象资源管理器中,展开服务器。

  2. 展开 “数据库”,然后展开数据库。

  3. 展开 “存储”,然后展开 “搜索属性列表 ”节点。

  4. 右键单击要删除的属性列表,然后单击“ 删除”。

  5. 单击 “确定”

另请参阅

查找属性集GUID和属性整数ID以搜索属性
配置和管理搜索筛选器