FREETEXT (Transact-SQL)
更新日期: 2006 年 4 月 14 日
谓词用于搜索含有基于字符的数据类型的列,其中的值符合在搜索条件中所指定文本的含义,但不符合表达方式。如果使用 FREETEXT,则全文查询引擎将在内部对 freetext_string 执行以下操作,并为每个字词分配权重,再查找匹配项。
- 基于单词边界(单词界限)将字符串分隔成单独的单词。
- 生成单词的词形变化形式(词干处理)。
- 基于同义词库中的匹配项标识字词的扩展或替换的列表。
语法
FREETEXT ( { column_name | (column_list) | * }
, 'freetext_string' [ , LANGUAGE language_term ] )
参数
- column_name
已经注册全文搜索的列的名称。类型为 char、varchar、nchar、nvarchar、text、ntext、image、xml 和 varbinary(max) 的列是全文搜索的有效列。
- column_list
指示可以指定多个列(以逗号分隔)。column_list 必须包含在括号中。除非指定 language_term,否则 column_list 表的所有列的语言都必须相同。
- *
指定所有注册全文搜索的列均应用于搜索给定的 freetext_string。如果 FROM 子句中有多个表,那么 * 必须由表名限定。除非指定 language_term,否则表的所有列的语言都必须相同。
freetext_string
要在 column_name 中搜索的文本。可以输入任何文本,包括单词、短语或句子。只要在全文索引中找到任何术语或术语格式,就会生成匹配项。freetext_string 的数据类型是 nvarchar。将另一个字符数据类型用作输入时,将发生隐式转换。在以下示例中,
@SearchWord
变量(被定义为varchar(30)
)导致FREETEXT
谓词中发生隐式转换。USE AdventureWorks; GO DECLARE @SearchWord varchar(30) SET @SearchWord ='performance' SELECT Description FROM Production.ProductDescription WHERE FREETEXT(Description, @SearchWord);
由于“参数截取”跨转换无效,因此请使用 nvarchar 以获得更好性能。在该示例中,请将
@SearchWord
声明为nvarchar(30)
。USE AdventureWorks; GO DECLARE @SearchWord nvarchar(30) SET @SearchWord = N'performance' SELECT Description FROM Production.ProductDescription WHERE FREETEXT(Description, @SearchWord);
对于生成非最佳计划的情况,还可以使用 OPTIMIZE FOR 查询提示。
与 AND 作为关键字的 CONTAINS 搜索条件不同,当“and”在 freetext_string 中使用时,它被视为一个干扰词,因此将被丢弃。
不允许使用 WEIGHT、FORMSOF、通配符、NEAR 和其他语法。系统将通过同义词库对 freetext_string 字符串进行断字处理、词干分析,然后执行同义词库查询。如果使用双引号将 freetext_string 引起来,将执行短语匹配;而不执行词干分析和同义词库查询处理。
LANGUAGE language_term
特定的语言,其资源将作为 FREETEXT 查询的一部分用于单词断字、词干分析、同义词库查询以及干扰词删除。此参数可选,可以将它指定为与语言区域设置标识符 (LCID) 对应的字符串、整数或十六进制值。如果指定了 language_term,则其表示的语言将应用于搜索条件的所有元素。如果未指定值,则使用该列的全文语言。如果指定为字符串,则 language_term 对应于 syslanguages 系统表中 alias 列的值。in 'language_term'. 字符串必须用单引号引起,如 'language_term'。如果指定为整数,则 language_term 是标识该语言的实际 LCID。如果指定为十六进制值,则 language_term 将以 0x 开头,后面跟有 LCID 的十六进制值。十六进制值不能超过八位(包括前导零在内)。
如果该值是双字节字符集 (DBCS) 格式,则 Microsoft SQL Server 会将其转换为 Unicode 格式。
如果指定的语言无效,或者没有安装对应于该语言的资源,Microsoft SQL Server 将返回错误。若要使用非特定语言资源,请将 0x0 指定为 language_term。
备注
使用 FREETEXT 的全文查询没有使用 CONTAINS 的全文查询精度高。SQL Server 全文搜索引擎识别重要的字词和短语。保留关键字或通配符字符都不具有特殊含义,而它们指定在 CONTAINS 谓词的 <contains_search_condition> 参数中时则通常具有含义。
如果兼容级别小于 70,则 FREETEXT 无法被识别为关键字。有关详细信息,请参阅 sp_dbcmptlevel (Transact-SQL)。
示例
A. 使用 FREETEXT 搜索包含指定字符值的单词
以下示例搜索包含与 vital、safety、components 相关的单词的所有文档。
USE AdventureWorks;
GO
SELECT Title
FROM Production.Document
WHERE FREETEXT (Document, 'vital safety components' );
GO
B. 通过变量使用 FREETEXT
以下示例使用了变量来取代具体的搜索项。
USE AdventureWorks;
GO
DECLARE @SearchWord nvarchar(30);
SET @SearchWord = N'high-performance';
SELECT Description
FROM Production.ProductDescription
WHERE FREETEXT(Description, @SearchWord);
GO
请参阅
参考
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
数据类型 (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
WHERE (Transact-SQL)
帮助和信息
更改历史记录
版本 | 历史记录 |
---|---|
2006 年 4 月 14 日 |
|