【问题标题】:Why can't I create this sql server full text index?为什么我不能创建这个 sql server 全文索引?
【发布时间】:2010-02-21 18:08:34
【问题描述】:

我有一个数据库表,其主列定义为:

ID bigint identity primary key

我还有一个文本栏MiddlePart。我正在尝试创建一个全文索引,如下所示:

CREATE FULLTEXT INDEX ON domaining.dbo.DomainName
(
    MiddlePart 
    Language 0X0
)
KEY INDEX ID ON domaincatalog
WITH CHANGE_TRACKING AUTO

我收到此错误:

'ID' 不是强制全文搜索关键字的有效索引。全文搜索键必须是唯一的、不可为空的、单列索引,该索引不脱机,未在非确定性或不精确的非持久计算列上定义,没有过滤器,最大大小为 900字节。为全文键选择另一个索引。

我做错了什么?

【问题讨论】:

    标签: sql-server full-text-search


    【解决方案1】:

    在 KEY INDEX 之后,您需要指定索引的名称而不是列。要查找列 ID 上的索引名称,请键入 sp_help DomainName,然后该表上就会有一个索引列表。 pk 将被命名为 PK_xxxxx。使用该索引名称而不是“ID”。

    【讨论】:

    • 感谢我尝试使用列名:d
    • technet.microsoft.com/en-us/library/ms187317.aspx "KEY INDEX index_name - 是 table_name 上唯一键索引的名称。"
    • 感谢您为我指明了正确的方向!在SSMS中,如果您打开桌子上的+ 并转到Keys,以PK_ 开头的金色突出显示名称是您的主键。再次感谢您!
    • 在输入 exec sp_help DomainName 后出现错误 Msg 15009, Level 16, State 1, Procedure sp_help, Line 100 The object 'DomainName' does not exist in database 'Test' or is invalid for this operation. 请帮助
    • 一段时间后恢复这个,但是,当他们说“域名”时,他们的意思是表名
    【解决方案2】:

    不指定列名,而是指定索引的名称。您可以找到主键索引的名称,如:

    select name from sysindexes where object_id('DomainName') = id
    

    然后您可以创建全文索引,如:

    CREATE FULLTEXT INDEX ON DomainName
    (
        MiddlePart 
        Language 0X0
    )
    KEY INDEX PK__DomainName__40E497F3 ON domaincatalog
    WITH CHANGE_TRACKING AUTO
    

    【讨论】:

      【解决方案3】:

      https://www.simple-talk.com/sql/learn-sql-server/understanding-full-text-indexing-in-sql-server/

      CREATE TABLE ProductDocs (
        DocID INT NOT NULL IDENTITY,
        DocTitle NVARCHAR(50) NOT NULL,
        DocFilename NVARCHAR(400) NOT NULL,
        FileExtension NVARCHAR(8) NOT NULL,
      
            DocSummary NVARCHAR(MAX) NULL,
            DocContent VARBINARY(MAX) NULL,
            CONSTRAINT [PK_ProductDocs_DocID] PRIMARY KEY CLUSTERED (DocID ASC)
          )
      CREATE FULLTEXT INDEX ON ProductDocs
      (DocSummary, DocContent TYPE COLUMN FileExtension LANGUAGE 1033)
      KEY INDEX PK_ProductDocs_DocID
      ON ProductFTS
      WITH STOPLIST = SYSTEM 
      

      语句的第一行包含 ON 子句,它指定表名(在本例中为 ProductDocs)。该语句的下一行是应被索引的列的列表(DocSummary 和 DocContent)。

      上例中 CREATE FULLTEXT INDEX 语句的下一行是 KEY INDEX 子句。这是在 ProductDocs 表上定义的唯一键索引的名称(在本例中为 PK_ProductDocs_DocID)。定义全文索引时,请务必指定索引名称,而不是列名称。

      全文索引定义中的 KEY INDEX 子句之后是 ON 子句,它指定索引将加入的全文目录 (ProductFTS) 的名称。在 SQL Server 2008 中,您还可以指定将存储索引的文件组。但是,此选项在 SQL Server 2005 中不可用,因为文件组关联在目录级别。

      示例 CREATE FULLTEXT INDEX 语句中的最后一个子句是 WITH STOPLIST。此选项仅在 SQL Server 2008 中可用,可让您指定将用于此索引的停止列表的名称。在这种情况下,将使用系统停止列表,但您可以改为指定用户定义的停止列表。 (停止列表将在本文后面更详细地介绍。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-22
        • 2013-07-25
        • 2021-10-15
        相关资源
        最近更新 更多