Невозможно использовать предикат CONTAINS или FREETEXT для таблицы или индексированного представления, поскольку он не является полнотекстовым индексированным
Я получаю следующую ошибку в моей базе данных SQL server 2008 R2:
Не могу использовать
CONTAINS
илиFREETEXT
предикат для таблицы или индексированного представления 'tblArmy', поскольку он не является полнотекстовым индексированным.
6 ответов:
убедитесь, что у вас установлена функция полнотекстового поиска.
создать каталог полнотекстового поиска.
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...
пункт подменю. Мастер полнотекстового индексирования поможет вам в этом процессе. Он также создаст каталог полнотекстового поиска для вас, если у вас его еще нет.вы можете найти дополнительную информацию в 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
.
вы должны добавить полнотекстовый индекс для конкретных полей, которые вы хотите найти.
ALTER TABLE news ADD FULLTEXT(headline, story);
где "новости" - это ваша таблица и поля" заголовок, история", которые вы обычно включаете для полнотекстового поиска
существует еще одно решение для установки полного текста столбца в true.
эти решения, например, не работают для меня
ALTER TABLE news ADD FULLTEXT(headline, story);
мое решение.
- Правой Кнопкой Мыши на таблице
- конструкция
- Правой Кнопкой Мыши на столбце, который вы хотите редактировать
- полнотекстовый индекс
- добавить
- закрыть
- обновить
СЛЕДУЮЩИЕ ШАГИ
- Правой Кнопкой Мыши на таблица
- конструкция
- нажмите на столбец, который вы хотите изменить
- в нижней части mssql у вас будет вкладка "свойства столбца"
- полнотекстовая спецификация - > (полнотекстовая индексация) значение true.
обновить
версия mssql 2014