在SQL Server中如何使用TYPE COLUMN选项创建全文索引



我有一个如下的表定义

CREATE TABLE [dbo].[Dialogs](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [DiscussionID] [int] NOT NULL,
    [ApprovedByUserID] [int] NULL,
    [AddedByUserID] [int] NULL,
    [Text] [nvarchar](max) NULL,
    [ApprovalStatus] [int] NULL,
    [ApprovedOn] [datetime] NULL,
    [AddedOn] [datetime] NOT NULL,
 CONSTRAINT [PK_dbo.Dialogs] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

Text列包含用户输入的html。我想在Text列上创建全文索引,我还需要支持html过滤器,这样当任何用户键入<div><p>或任何其他html标记时,它都不会返回任何结果。

要创建索引,我使用以下SQL

CREATE FULLTEXT INDEX ON [Dialogs]
 ( 
  [Text] TYPE COLUMN '.html'
 ) 
  KEY INDEX [PK_dbo.Dialogs]
      ON AOPRDefault; 

SQL Server抛出错误

".html".附近的语法不正确

请举一个例子说明如何在创建全文索引时指定TYPE COLUMN选项。

首先,问题是你应该引用一个有'.html'而不是文字的列,所以你可能有这样的东西:

-- ADD COMPUTED COLUMN TO STORE FILE TYPE
ALTER TABLE dbo.Dialogs ADD FileExtension AS '.html'; 
CREATE FULLTEXT INDEX ON dbo.Dialogs ([Text] TYPE COLUMN FileExtension)
    KEY INDEX [PK_dbo.Dialogs] ON AOPRDefault;

然而,根据以下文件,您误解了TYPE COLUMN属性的用途:

TYPE COLUMNTYPE_COLUMN_name

指定表列的名称type_column_name,用于保存varbinary(max)或image文档的文档类型。此列称为类型列,包含用户提供的文件扩展名(.doc、.pdf、.xls等)。类型列的类型必须是char、nchar、varchar或nvarchar。

仅当COLUMN_name指定varbinary(max)或image列(其中数据存储为二进制数据)时,才指定TYPE COLUMN TYPE_COLUMN_name;否则,SQL Server将返回一个错误。

注意

在编制索引时,全文引擎使用每个表行的类型列中的缩写来标识要用于column_name中文档的全文搜索筛选器。过滤器将文档加载为二进制流,删除格式信息,并将文档中的文本发送到分词组件。有关更多信息,请参阅配置和管理搜索的过滤器

由于索引位于文本列上,因此这是不适用的,createindex语句将返回错误。即使您将html文档存储为二进制数据,它也不会像您想要的那样工作,您所追求的是html解析,这是一个与全文索引不同的问题。

最新更新