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

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

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

Ответы [ 7 ]

99 голосов
/ 14 мая 2011
  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

57 голосов
/ 04 ноября 2012

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

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

SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
17 голосов
/ 04 сентября 2015

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

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

Пример:

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

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

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

3 голосов
/ 14 мая 2011
1 голос
/ 11 мая 2017

Существует еще одно решение для установки столбца Полный текст в true.

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

ALTER TABLE news ADD FULLTEXT(headline, story);

Мое решение.

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

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

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

Обновить

Версия mssql 2014

1 голос
/ 14 мая 2011

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

ALTER TABLE news ADD FULLTEXT(headline, story);

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

0 голосов
/ 17 апреля 2019
Select * from table
where CONTAINS([Column], '"A00*"')  

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

where [Column] Like 'A00%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...