Создать FREETEXTTABLE в MS SQL

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

Сообщение 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');

person KarthiK    schedule 05.10.2015    source источник
comment
Я протестировал ваш код на SQL Server 2014 и успешно работает без ошибок :)   -  person Eralper    schedule 05.10.2015
comment
FullText уже установлен? Пожалуйста, проверьте с помощью: SELECT FullTextServiceProperty('IsFullTextInstalled')   -  person Eralper    schedule 05.10.2015
comment
Я использую MS SQL Server 2008 Express Edition. Этот запрос на выборку возвращает 0.   -  person KarthiK    schedule 05.10.2015
comment
Пожалуйста, проверьте следующее Сравнительная таблица SQL Server 2008 Edition. Там я вижу, что версия Express Advanced поддерживает полнотекстовый поиск.   -  person Eralper    schedule 05.10.2015


Ответы (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. Установите его, дважды щелкнув setup.
  4. Выберите «обновить существующий экземпляр до новой версии или редакции» и выполните все шаги.
  5. Я почти уверен, что меня никогда не спрашивали, какие функции мне нужны (т.е. не было возможности выбрать полнотекстовый поиск). При повторном запуске установщика также не было возможности «добавить функции в существующий экземпляр», поэтому в конце концов я понял, что необходимы следующие дополнительные шаги...
  6. Перейдите в Панель управления > Установка и удаление программ.
  7. Найдите SQL Server и откройте его. (Он задал мне вопрос в духе «удаление этого, пока другие люди используют его, причинит им некоторую боль» — это было немного страшно, но я сказал «да, ладно», а затем задал обычный вопрос: хочу ли я удалить или изменять)
  8. Вопрос: удалить или изменить (Ответ: изменить).
  9. Нажмите «Добавить функции»
  10. Найдите установочный носитель. В этом случае мы можем найти место, где мы разархивировали установщик для «SQL Server Express с расширенными службами» (обратите внимание, что его необходимо извлечь, иначе он ему не понравится)
  11. Пройдите кучу дерьма вокруг шагов. Затем вам будет предложено «установить новый экземпляр» или «добавить функции в существующий экземпляр» (выберите «Добавить функции»).
  12. На шаге «Возможности» вы можете поставить галочку «Полнотекстовый поиск» (ура!!)
  13. Завершите работу мастера, и теперь все должно работать, запустите этот sql для подтверждения:

    ВЫБЕРИТЕ SERVERPROPERTY('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-запрос вернет результаты, как на изображении ниже: введите здесь описание изображения

person Karthikeyan P    schedule 06.10.2015

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

CREATE FULLTEXT CATALOG TestFTCat;
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;
person Eralper    schedule 05.10.2015