FREETEXTTABLE (Transact-SQL)

更新日期: 2006 年 7 月 17 日

为符合下述条件的列返回行数为零或包含一行或多行的表:这些列包含基于字符的数据类型,其中的值符合指定的 freetext_string 中文本的含义,但不一定具有完全相同的文本语言。像常规表名称一样,FREETEXTTABLE 也可以在 SELECT 语句的 FROM 子句进行引用。

使用 FREETEXTTABLE 进行的查询可以指定 freetext 类型的全文查询,这些查询为每行返回一个关联等级值 (RANK) 和全文键 (KEY)。

主题链接图标Transact-SQL 语法约定

语法

FREETEXTTABLE (table , { column_name | (column_list) | * } 
          , 'freetext_string' 
     [ ,LANGUAGE language_term ] 
     [ ,top_n_by_rank ] )

参数

  • table
    指定表的名称,该表已标记为全文查询。tableview可以是由一个部分、两个部分或三个部分组成的数据库对象名称。查询视图时,仅能涉及一个全文索引的基表。

    有关详细信息,请参阅 Transact-SQL 语法约定 (Transact-SQL)

    table 不能指定服务器名,也不能在针对链接服务器执行的查询中使用。

  • column_name
    要搜索的驻留在 table 中的列名称。类型为 charvarcharncharnvarchartextntextimagexmlvarbinary(max) 的列是全文搜索的有效列。
  • column_list
    指示可以指定多个列(以逗号分隔)。column_list 必须用括号括起来。除非指定 language_term,否则 column_list 中所有列的语言必须相同。
  • *
    指定所有注册全文搜索的列均应用于搜索给定的 freetext_string。除非指定 language_term,否则表中的所有全文索引列必须使用相同的语言。
  • freetext_string
    要在 column_name 中搜索的文本。可以输入任何文本,包括单词、短语或句子。只要在全文索引中找到任何术语或术语格式,就会生成匹配项。

    与 AND 作为关键字的 CONTAINS 搜索条件不同,当“and”在 freetext_string 中使用时,它被视为一个干扰词,因此将被丢弃。

    不允许使用 WEIGHT、FORMSOF、通配符、NEAR 和其他语法。系统将通过同义词库对 freetext_string 字符串进行断字处理、词干分析,然后执行同义词库查询。如果使用双引号将 freetext_string 引起来,将执行短语匹配;而不执行词干分析和同义词库查询处理。

  • LANGUAGE language_term
    特定的语言,其资源将作为 FREETEXTTABLE 查询的一部分用于断字处理、词干分析、同义词库查询以及干扰词删除。此参数是可选的,可以将其指定为与语言区域设置标识符 (LCID) 对应的字符串、整数或十六进制值。如果指定了 language_term,则它表示的语言将应用于搜索条件的所有元素。如果未指定值,则使用该列的全文语言。

    如果指定为字符串,则 language_term 对应于 syslanguages 系统表中的 alias 列的值。字符串必须用单引号引起,如 'language_term'。如果指定为整数,则 language_term 就是标识该语言的实际 LCID。如果指定为十六进制值,则 language_term 将以 0x 开头,后跟 LCID 的十六进制值。十六进制值不能超过八位(包括前导零在内)。

    如果该值是双字节字符集 (DBCS) 格式,则 Microsoft SQL Server 会将其转换为 Unicode 格式。

    如果指定的语言无效,或者未安装对应于该语言的资源,SQL Server 将返回错误消息。若要使用非特定语言资源,请将 0x0 指定为 language_term

  • top_n_by_rank
    如果指定整数值 n,FREETEXTTABLE 将仅返回最前面的 n 个匹配项,并按排名排序。

    如果除了 FREETEXTTABLE 谓词以外还执行其他筛选,则筛选条件只应用于前 n 行,筛选后返回的行数将少于 top_n_by_rank。在 sp_configure 存储过程中启用 precompute rank 选项可以提高使用 top_n_by_rank 参数进行 FREETEXTTABLE 查询的性能。有关详细信息,请参阅 sp_configure (Transact-SQL)sp_fulltext_service (Transact-SQL)

备注

FREETEXTTABLE 使用与 FREETEXT 谓词相同的搜索条件。

和 CONTAINSTABLE 一样,返回的表包含名为 KEYRANK 的列,可以在查询中引用这些列以获取相应的行并使用行排名值。

如果兼容级别小于 70,则 FREETEXTTABLE 无法被识别为关键字。有关详细信息,请参阅 sp_dbcmptlevel (Transact-SQL)

权限

只有对指定表或表中所引用的列具有适当的 SELECT 权限的用户才能调用 FREETEXTTABLE。

示例

以下示例返回所有与 sweetcandybreaddrymeat 相关的类别名称和类别说明。

ms177652.note(zh-cn,SQL.90).gif注意:
您必须安装 Northwind 数据库,才可运行此示例。有关如何安装 Northwind 数据库的详细信息,请参阅下载 Northwind 和 pubs 示例数据库
USE Northwind;
SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat') AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO

以下示例与上例相同,只是说明了 LANGUAGElanguage_termtop_n_by_rank 参数的用法。

USE Northwind;
SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat',LANGUAGE 'English',2) 
        AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
ms177652.note(zh-cn,SQL.90).gif注意:
使用 top_n_by_rank 参数并不需要 LANGUAGE language_term 参数。

更改历史记录

发布日期 历史记录

2006 年 7 月 17 日

新增内容:
  • 添加了 LANGUAGE 参数的示例。

请参阅

参考

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
行集函数 (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)

其他资源

使用全文搜索查询 SQL Server
precompute rank 选项

帮助和信息

获取 SQL Server 2005 帮助