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

Arj*_*ani 3 html sql-server full-text-search full-text-indexing sql-server-2012

我有一个表定义如下

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]
Run Code Online (Sandbox Code Playgroud)

Text列包含用户输入的html.我想创建的全文索引Text列,我还需要支持HTML过滤器,这样,当任何用户类型<div>,<p>或任何其他HTML标记则不会返回任何结果.

要创建索引我在下面使用 SQL

CREATE FULLTEXT INDEX ON [Dialogs]
 ( 
  [Text] TYPE COLUMN '.html'
 ) 
  KEY INDEX [PK_dbo.Dialogs]
      ON AOPRDefault; 
Run Code Online (Sandbox Code Playgroud)

SQL Server抛出错误

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

任何人都可以举例说明如何TYPE COLUMN在创建全文索引时指定选项.

Gar*_*thD 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;
Run Code Online (Sandbox Code Playgroud)

但是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解析,这是一个与全文索引不同的问题.