Невозможно использовать предикат 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