Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

  • Убедитесь, что у вас установлен полнотекстовый поиск.

    Full-Text Search setup

  • Создайте полнотекстовый каталог поиска.

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

     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

Ответ 2

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

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

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

Ответ 3

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

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

Пример:

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

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

увидеть результат: enter image description here

Ответ 5

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

ALTER TABLE news ADD FULLTEXT(headline, story);

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

Ответ 6

Есть еще одно решение установить столбец Full text в true.

Это решение, например, не сработало для меня

ALTER TABLE news ADD FULLTEXT(headline, story);

Мое решение.

  • Щелкните правой кнопкой мыши на таблице
  • Дизайн
  • Щелкните правой кнопкой мыши по столбцу, который вы хотите изменить
  • Полный текстовый индекс
  • Добавить
  • Закрыть
  • Обновить

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

  • Щелкните правой кнопкой мыши на таблице
  • Дизайн
  • Щелкните по столбцу, который вы хотите отредактировать
  • В нижней части mssql вы увидите вкладку "Свойства столбца"
  • Полнотекстовая спецификация → (индексируется полным текстом) установлена ​​в значение true.

Обновить

Версия mssql 2014

Ответ 7

Select * from table
where CONTAINS([Column], '"A00*"')  

будет действовать как% так же, как

where [Column] Like 'A00%'