Создать FREETEXTTABLE в MS SQL

Я пытаюсь создать FREETEXTTABLE. Я получаю следующую ошибку.

Msg 7601, уровень 16, состояние 2, строка 1

Невозможно использовать предикат CONTAINS или FREETEXT для табличного или индексированного представления "Флаги", поскольку оно не полнотекстовое индексированное.

Мой образец,

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));

CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);

INSERT Flags VALUES ('France', 'Blue and White and Red');
INSERT Flags VALUES ('Italy', 'Green and White and Red');
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');

SELECT * FROM Flags;
GO

CREATE FULLTEXT CATALOG TestFTCat;
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;
GO 

SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Blue');

2 ответа

Решение

Простой способ проверить, установлен ли полнотекстовый "компонент" MSSQL Server 2008, - выполнить следующий T-SQL

SELECT SERVERPROPERTY('IsFullTextInstalled')

Если это возвращает значение "1", то компонент установлен.

В противном случае вам необходимо установить полнотекстовый поиск SQL Server в существующем экземпляре SQL Server.

  1. Загрузите последнюю версию установщика для "SQL Server Express с расширенными службами" на сервер (например, сохраните его в "c:\installers") MSSQL Server 2008 Express с расширенными службами.
  2. Найдите, где вы его сохранили, и распакуйте самораспаковывающийся EXE-файл (щелкните правой кнопкой мыши и выберите "Извлечь").
  3. Установите его, дважды щелкнув по настройке.
  4. Выберите "обновить существующий экземпляр до новой версии или редакции" и выполните все шаги.
  5. Я почти уверен, что меня никогда не спрашивали, какие функции мне бы хотелось (т.е. у меня не было возможности выбрать полнотекстовый поиск) При повторном запуске установщика также не было возможности "добавить функции в существующий экземпляр", поэтому в конце концов я понял, что необходимы следующие дополнительные шаги...
  6. Зайдите в Панель управления> Установка и удаление программ
  7. Найдите SQL Server и откройте его. (Он задал мне вопрос в духе "удаление этого, когда другие люди его используют, причинит им некоторую боль" - это было немного страшно, но я сказал "да", а затем задал обычный вопрос: хочу ли я удалить или менять)
  8. Вопрос: удалить или изменить (Ответ: изменить).
  9. Нажмите "Добавить функции"
  10. Найдите установочный носитель. В этом случае мы можем найти место, где разархивировали установщик для "SQL Server Express с расширенными службами" (обратите внимание, что он должен быть извлечен, или он не понравится)
  11. Пройдите через кучу трескучих шагов. Затем вам будет предложено "установить новый экземпляр" или "добавить функции в существующий экземпляр" (выберите "Добавить функции").
  12. На шаге "Возможности" вы можете установить флажок "Полнотекстовый поиск" (ура!!)
  13. Завершите работу мастера, и теперь все должно работать, запустите этот sql для подтверждения:

    ВЫБЕРИТЕ СЕРВЕРНУЮ СОБСТВЕННОСТЬ ('IsFullTextInstalled')

Теперь вы можете включить полнотекстовый поиск с T-SQL

-- We'll use Northwind sample database to enable
-- Full Text Search feature using T-SQL code only
USE Northwind
GO

-- We need to enable full text search for Northwind database
-- We will do that with sp_fulltext_database procedure
EXEC sp_fulltext_database 'enable'
-- Create catalog
EXEC sp_fulltext_catalog 'NorthwindCatalog','create'
-- Add some indexes to database
EXEC sp_fulltext_table 'Customers', 'create', 'NorthwindCatalog', 'pk_customers'
EXEC sp_fulltext_table 'Orders', 'create', 'NorthwindCatalog', 'pk_orders'
-- add columns for searching to full text search index
EXEC sp_fulltext_column 'Customers', 'CompanyName', 'add'
EXEC sp_fulltext_column 'Customers', 'ContactName', 'add'
EXEC sp_fulltext_column 'Customers', 'Address', 'add'
EXEC sp_fulltext_column 'Customers', 'City', 'add'
EXEC sp_fulltext_column 'Orders', 'ShipName', 'add'
EXEC sp_fulltext_column 'Orders', 'ShipAddress', 'add'
EXEC sp_fulltext_column 'Orders', 'ShipCity', 'add'
-- Activate full text search indexes
EXEC sp_fulltext_table 'Customers','activate'
EXEC sp_fulltext_table 'Orders','activate'
-- start full population of catalog
EXEC sp_fulltext_catalog 'NorthwindCatalog', 'start_full'

Теперь вы можете выполнять поиск по индексированным столбцам, используя ключевые слова CONTAINS, FREETEXT, CONTAINSTABLE или FREETEXTTABLE. Например, скажем, я хочу проверить все контакты, где имя Мария или Ана:

USE Northwind
GO

SELECT CustomerId, ContactName, CompanyName, Address, City
FROM Customers c INNER JOIN
CONTAINSTABLE(Customers, (ContactName), '"Maria" OR "Ana"') AS KEY_TBL
ON c.CustomerId = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC

Этот SQL-запрос вернет результаты, как показано на рисунке ниже:

Следующие разделы кода почему-то не выполняются в вашей базе данных. Сначала выполните команды ниже, затем используйте FreeTextTable

CREATE FULLTEXT CATALOG TestFTCat;
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;
Другие вопросы по тегам