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

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

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

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