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


Я получаю следующую ошибку в моей базе данных SQL server 2008 R2:

Не могу использовать CONTAINS или FREETEXT предикат для таблицы или индексированного представления 'tblArmy', поскольку он не является полнотекстовым индексированным.

6 62

6 ответов:

  1. убедитесь, что у вас установлена функция полнотекстового поиска.

    Full-Text Search setup

  2. создать каталог полнотекстового поиска.

     use AdventureWorks
     create fulltext catalog FullTextCatalog as default
    
     select *
     from sys.fulltext_catalogs
    
  3. создать индекс полнотекстового поиска.

     create fulltext index on Production.ProductDescription(Description)
     key index PK_ProductDescription_ProductDescriptionID
    

    перед созданием индекса, убедитесь, что:
    -у вас еще нет индекса полнотекстового поиска в таблице, так как только один индекс полнотекстового поиска разрешен в таблице
    - уникальный индекс существует на стол. Индекс должен быть основан на одинарном ключевом столбце, который не допускает NULL.
    - полнотекстовый каталог. Необходимо явно указать имя полнотекстового каталога, если полнотекстовый каталог по умолчанию отсутствует.

вы можете сделать шаг 2 и 3 в SQL Sever Management Studio. В обозревателе объектов щелкните правой кнопкой мыши таблицу и выберите Full-Text index пункт меню, а затем Define Full-Text Index... пункт подменю. Мастер полнотекстового индексирования поможет вам в этом процессе. Он также создаст каталог полнотекстового поиска для вас, если у вас его еще нет.

enter image description here

вы можете найти дополнительную информацию в MSDN

обойти CONTAINS: Если вы не хотите создавать полнотекстовый индекс в столбце, а производительность не является одним из ваших приоритетов, вы можете использовать LIKE оператор, который не нуждается в какой-либо предварительной конфигурации:

пример: найти все продукты, которые содержат букву Q:

SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'

необходимо указать Full-Text-Index на всех таблиц в базе данных, где требуется использовать запрос с CONTAINS который займет некоторое время.

вместо этого просто используйте LIKE что даст вам мгновенные результаты без необходимости настраивать какие-либо настройки для таблиц.

пример:

SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'

тот же результат, полученный с CONTAINS можно получить с помощью LIKE.

посмотреть результат: enter image description here

вы должны добавить полнотекстовый индекс для конкретных полей, которые вы хотите найти.

ALTER TABLE news ADD FULLTEXT(headline, story);

где "новости" - это ваша таблица и поля" заголовок, история", которые вы обычно включаете для полнотекстового поиска

существует еще одно решение для установки полного текста столбца в true.

эти решения, например, не работают для меня

ALTER TABLE news ADD FULLTEXT(headline, story);

мое решение.

  1. Правой Кнопкой Мыши на таблице
  2. конструкция
  3. Правой Кнопкой Мыши на столбце, который вы хотите редактировать
  4. полнотекстовый индекс
  5. добавить
  6. закрыть
  7. обновить

СЛЕДУЮЩИЕ ШАГИ

  1. Правой Кнопкой Мыши на таблица
  2. конструкция
  3. нажмите на столбец, который вы хотите изменить
  4. в нижней части mssql у вас будет вкладка "свойства столбца"
  5. полнотекстовая спецификация - > (полнотекстовая индексация) значение true.

обновить

версия mssql 2014