我有一个表定义如下
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
选项。
答案 0 :(得分:5)
首先,问题是你应该引用一个你有'.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;
然而,根据the documentation,您误解了TYPE COLUMN
属性的目的:
TYPE COLUMN type_column_name
指定表列的名称type_column_name,用于保存varbinary(max)或image文档的文档类型。此列称为类型列,包含用户提供的文件扩展名(.doc,.pdf,.xls等)。 type列的类型必须为char,nchar,varchar或nvarchar。
仅当column_name指定varbinary(max)或image列时才指定TYPE COLUMN type_column_name,其中数据存储为二进制数据;否则,SQL Server会返回错误。
注意强>
在索引编制时,全文引擎使用每个表行的类型列中的缩写来标识要在column_name中用于文档的全文搜索过滤器。过滤器将文档作为二进制流加载,删除格式信息,并将文档中的文本发送到分词器组件。有关详细信息,请参阅配置和管理搜索过滤器
由于索引位于文本列上,因此不适用,并且create index语句将返回错误。即使你将html文档存储为二进制数据,它仍然无法按预期工作,你所追求的是html parsing,这是一个与全文索引不同的问题。