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