代码之家  ›  专栏  ›  技术社区  ›  Nathan Ridley

为什么不能创建此SQL Server全文索引?

  •  20
  • Nathan Ridley  · 技术社区  · 15 年前

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

    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字节。为全文键选择另一个索引。

    我做错什么了?

    3 回复  |  直到 9 年前
        1
  •  31
  •   user121301    15 年前

    在键索引之后,需要指定索引的名称,而不是列。要查找列ID上索引的名称,请键入 sp_help DomainName 表上会有一个索引列表。pk将被命名为类似pk_uuxxxxx的名称。使用索引名而不是“id”。

        2
  •  4
  •   Andomar    15 年前

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

    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
  •  1
  •   zloctb    9 年前

    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)的名称。在定义全文索引时,请确保指定索引名,而不是列名。

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

    示例create fulltext index语句中的最后一个子句带有非索引字表。此选项仅在SQL Server 2008中可用,允许您指定将用于此索引的非索引字表的名称。在这种情况下,将使用系统非索引字表,但您可以指定用户定义的非索引字表。(本文后面将详细介绍停止列表。)