全文搜索概述

全文查询根据特定语言(例如,英语或日语)的规则对词和短语进行操作,从而对全文索引中的文本数据执行语言搜索。全文查询可以包括简单的词和短语,或者词或短语的多种形式。

全文搜索适用于多种商业应用场景:例如,电子商务(在网站上搜索项目)、律师事务所(在法律数据库中搜索案例记录)或人力资源部门(从所存储的个人简历中找到符合职位描述的简历)。不管是什么样的商业应用场景,全文搜索的基本管理任务和开发任务是相同的。然而,在给定的商业应用场景中,可以对全文索引和查询进行优化以使其满足业务目标。例如,对于电子商务来说,最大限度地提高性能可能比对结果进行排序、检索的准确性(实际上有多少个现有匹配项是由全文查询返回的)或支持多种语言更重要。对于律师事务所来说,首先需要考虑的可能是返回所有可能存在的匹配项(“返回全部”信息)。

关于如何配置数据库以进行全文搜索的概述

对于任何应用场景,数据库管理员都要执行以下基本步骤来将数据库中的表列配置为可以进行全文搜索:

  1. 创建全文目录。

  2. 在要搜索的每个表中,按以下方法创建全文索引:

    1. 标识要包含在全文索引中的各个文本列。

    2. 如果给定列包含存储为二进制数据(varbinary(max) 或 image 数据)的文档,您必须指定一个表列(“类型列”)以用来标识被索引的列中各文档的类型。

    3. 指定对列中文档进行全文搜索时所使用的语言。

    4. 选择全文索引中要使用的更改跟踪机制,以跟踪基表及其列中的更改。

全文搜索通过使用以下“语言组件”支持多种语言:断字符和词干分析器、包含非索引字(也称为“干扰词”)的非索引字表及同义词库文件。在某些情况下,同义词库文件和非索引字表需要由数据库管理员配置。给定同义词库文件支持使用相应语言的所有全文索引,给定非索引字表可以根据您的需要与尽可能多的全文索引相关联。

有关详细信息,请参阅管理全文搜索

全文查询概述

在将列添加到全文索引之后,应用程序和用户即可对列中的文本运行全文查询。这些查询可以搜索以下项中的任一项:

  • 一个或多个特定的词或短语(“简单词”)

  • 以指定文本开头的词或短语(“前缀词”)

  • 特定词的变形(“派生词”)

  • 与另一个词或短语邻近的词或短语(“邻近词”)

  • 特定词的同义词形式(“同义词库”)

  • 使用加权值的词或短语(“加权词”)

全文查询都使用一小组 Transact-SQL 谓词(CONTAINS 和 FREETEXT)和函数(CONTAINSTABLE 和 FREETEXTTABLE)。然而,给定商业应用场景的搜索目标会对全文查询的确切结构产生影响,例如:

  • 电子商务(在网站上搜索产品):

    SELECT product_id FROM products WHERE CONTAINS(product_description, ”Snap Happy 100EZ” OR FORMSOF(THESAURUS,’Snap Happy’) OR ‘100EZ’) AND product_cost<200 …
    
  • 招聘员工(搜索具有 SQL Server 使用经验的职位候选人):

    SELECT candidate_name,SSN FROM candidates WHERE CONTAINS(candidate_resume,”SQL Server”) AND candidate_division =DBA
    

有关详细信息,请参阅使用全文搜索查询 SQL Server

LIKE 与全文搜索的比较

与全文搜索不同,LIKE Transact-SQL 谓词仅对字符模式有效。另外,不能使用 LIKE 谓词来查询格式化的二进制数据。此外,对大量非结构化的文本数据执行 LIKE 查询要比对相同数据执行同样的全文查询慢得多。对数百万行文本数据进行的 LIKE 查询可能需要几分钟的时间才能返回结果;而对于同样的数据,全文查询只需要几秒或更少的时间,具体取决于返回的行数。