Почему я не могу создать полнотекстовый индекс этого сервера SQL? - PullRequest
22 голосов
/ 21 февраля 2010

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

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 ]

34 голосов
/ 21 февраля 2010

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

5 голосов
/ 21 февраля 2010

Вместо указания имени столбца укажите имя индекса. Вы можете найти имя индекса первичного ключа, например:

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
1 голос
/ 13 июля 2015

https://www.simple -talk.com / SQL / учиться-SQL-сервер / понимание-полнотекстовой индексации в-SQL-сервер /

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...