【问题标题】:In SQL Server How to create full text index with TYPE COLUMN option在 SQL Server 中如何使用 TYPE COLUMN 选项创建全文索引
【发布时间】:2015-12-16 09:34:44
【问题描述】:

我有一个如下表定义

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 sql-server sql-server-2012 full-text-search full-text-indexing


    【解决方案1】:

    首先,问题是您应该引用具有'.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属性的用途,根据the documentation

    类型列 type_column_name

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

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

    注意

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

    由于您的索引位于文本列上,因此这不适用,并且创建索引语句将返回错误。即使您将 html 文档存储为二进制数据,它仍然无法按您的预期工作,您需要的是 html parsing,这是与全文索引不同的问题。

    【讨论】:

    • 如果我将列数据类型更改为varbinary(max),您的解决方案可以解决我的问题。但我还需要显示记录,如果用户从对话框中输入了 3 个随机单词,那么它应该显示带有这些单词的对话框作为结果,因为我需要全文。是否有其他替代全文来过滤结果?
    • 恐怕我不能 100% 确定,我对全文索引所做的工作很少。我能想到的最佳解决方案是解析您的 html 的计算列,然后对此进行全文索引,但这似乎有点开销,因此您必须确定果汁是否值得挤压。跨度>
    • 谢谢,我也认为计算列上的全文索引是一个很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多