我有一个如下的表定义
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解析,这是一个与全文索引不同的问题。