Почему я не могу создать полный текстовый индекс sql-сервера?

У меня есть таблица базы данных с основным столбцом, определяемым как:

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 байт. Выберите другой индекс для полнотекстового ключа.

Что я делаю неправильно?

Ответы

Ответ 1

После KEY INDEX вам нужно указать имя индекса, а не столбец. Чтобы найти имя индекса для идентификатора столбца, введите sp_help DomainName и будет список индексов в этой таблице. Pk будет называться как PK_xxxxx. Используйте это имя индекса вместо "ID".

Ответ 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. Это имя уникального ключевого индекса (в данном случае PK_ProductDocs_DocID), который определен в таблице ProductDocs. Обязательно укажите имя индекса, а не имя столбца, при определении полнотекстового индекса.

В соответствии с предложением KEY INDEX в определении полнотекстового индекса используется предложение ON, в котором указывается имя полнотекстового каталога (ProductFTS), к которому присоединится индекс. В SQL Server 2008 вы также можете указать файловую группу, в которой будет храниться индекс. Однако этот параметр недоступен в SQL Server 2005, потому что ассоциация файловых групп находится на уровне каталога.

Заключительное предложение в примере: оператор CREATE FULLTEXT INDEX - WITH STOPLIST. Этот параметр, доступный только в SQL Server 2008, позволяет указать имя стоп-листа, который будет использоваться для этого индекса. В этом случае используется системный стоп-лист, но вместо этого вы можете указать пользовательский стоп-лист. (Стоп-листы более подробно рассматриваются ниже в статье.)