Skip to content

Как включить и отключить полнотекстовый поиск для баз данных SQL Server

Пересказ статьи Manvendra Singh. How to Enable and Disable Full Text Search for SQL Server Databases


Как вы можете знать, полнотекстовый поиск включен для всех баз данных SQL Server, если компоненты полнотекстового поиска установлены для экземпляра SQL Server. Если вашим требованием является отключить функциональность полнотекстового поиска для базы данных, как сделать, чтобы при этом полнотекстовый поиск продолжал работать для других баз данных на том же экземпляре SQL Server. В этой статье мы рассмотрим как включать и выключать функцию полнотекстового поиска для отдельных баз данных SQL Server.
Microsoft ввел функцию полнотекстового поиска для выполнения операций поиска по символьным данным таблиц, которые содержат большие объемы текстовых данных. Мы также можем этого достичь запросами с использованием оператора LIKE, но этот способ будет более затратным и может занять больше времени для получения результатов по сравнению с использованием полнотекстового поиска и его функциональности.

Чтобы использовать полнотекстовый поиск следуйте нижеприведенной последовательности действий для конфигурирования и использования функциональности полнотестового поиска.

  1. Установите функцию полнотекстового поиска во время инсталляции или в существующую инсталляцию.

  2. Создайте полнотекстовый каталог для хранения полнотекстовых индексов.

  3. Создайте полнотекстовый индекс на таблицах или индексных представлениях.

  4. Напишите запросы полнотекстового поиска, используя операторы CONTAINS или FREETEXT для поиска конкретных слов или строк.


Если вы не установил этот компонент во время инсталляции SQL Server, то вам потребуется добавить её посредством запуска установки SQL Server для вашего существующего экземпляра SQL Server. Я объяснял как сделать это на SQL Server 2019 в следующей статье.

После установки полнотекстового поиска для всех баз данных SQL Server полнотекстовый поиск будет включен по умолчанию. Я показал это на картинке ниже, создав базу данных и проверив установку полнотекстового поиска. База данных с именем "Full_Text_Search" была создана с помощью нижеприведенной команды с последующей проверкой включения полнотекстового поиска для этой базы данных.

--Создание базы данных Full_TEXT_Search
--Проверить, что полнотекстовый поиск включен для этой базы данных
CREATE DATABASE Full_Text_Search
GO
SELECT name as [DBName], is_fulltext_enabled
FROM sys.databases

Можно увидеть, что полнотекстовый поиск включен по умолчанию для вновь созданной базы данных "Full_Text_Search" на картинке ниже. Следует заметить, что я прежде установил компоненты полнотекстового поиска как часть инсталляции SQL Server.



Я предполагаю, что вы уже установили компоненты полнотекстового поиска для вашего экземпляра SQL Server, а также создали полнотекстовый каталог в базе данных AdventureWorks2019. Теперь я собираюсь показать вам как отключить функцию полнотекстового поиска для базы данных AdventureWorks2019 так, чтобы эту функцию нельзя было использовать для этой базы данных.

Отключение функции полнотекстового каталога в базе данных


Сначала мы выполним следующий оператор T-SQL, чтобы найти все базы данных, для которых включен полнотекстовый поиск. Вот синтаксис:

--Проверить включение полнотекстового поиска для баз данных
SELECT name as [DBName], is_fulltext_enabled
FROM sys.databases

Ниже показан вывод для каждой базы данных. Ваш вывод может отличаться в зависимости от установок этой функции для ваших баз данных. Как видно, полнотекстовый поиск включен для всех пользовательских баз данных. Теперь я отключу полнотекстовый поиск для базы данных "AdventureWorks2019".



Я выполнил нижеприведенный оператор T-SQL для отключения полнотекстового поиска для базы данных "AdventureWorks2019".

--Отключение полнотекстового поиска для базы данных "AdventureWorks2019"
USE [AdventureWorks2019]
GO
EXEC sp_fulltext_database 'disable'

Я использовал устаревшую хранимую процедуру "sp_fulltext_database" для отключения полнотекстового поиска, как это показано на скриншоте. Хотя Microsoft предлагает не использовать эту хранимую процедуру при разработке, поскольку она может исчезнуть в будущих версиях, но она по-прежнему имеется в SQL Server 2019 и работает прекрасно. Мы можем увидеть на картинке ниже, что команда была выполнена успешно.



Следует отметить один момент. Эта хранимая процедура не удаляет или отключает полнотекстовый каталог внутри базы данных. Если вы хотите удалить любой полный текстовый каталог из базы данных, вам нужно вручную удалить его из базы данных.

Давайте проверим сделанное изменение для базы данных AdventureWorks2019. Мы можем увидеть, что эта функция отмечена выключенной для AdventureWorks2019.



Если мы попытаемся выполнить хранимую процедуру sp_help_fulltext_catalogs, чтобы получить информацию о созданных в базе данных каталогах, то получим следующую ошибку, поскольку мы отключили полнотекстовый поиск для этой базы данных.


Msg 15601, Level 16, State 1, Procedure sp_help_fulltext_catalogs, Line 7 [Batch Start Line 2]
Full-Text Search is not enabled for the current database. Use sp_fulltext_database to enable Full-Text Search. The functionality to disable and enable full-text search for a database is deprecated. Please change your application.

Completion time: 2020-09-19T08:23:55.4925924-07:00



Хотя отключение полнотекстового индексирования не удаляет строки из sysfulltextcatalogs, это не означает, что полнотекстовый поиск включен, и таблицы больше не помечаются доступными для полнотекстового индексирования. Все определения полнотекстовых метаданных по-прежнему будут находиться в системных таблицах. Вы можете посмотреть на рисунке ниже, где мы отключили полнотекстовый поиск для базы данных AdventureWorks2019, что её полнотекстовый каталог "AW2016FullTextCatalog" все еще существует и может быть доступен.



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



Как говорилось выше, все определения полнотекстовых метаданных по-прежнему остаются в системных таблицах, к которым можно обратиться, если нужно. Для проверки этого я использую следующий системный объект.

--Получение информации о полнотекстовом каталоге из системного представления
USE [AdventureWorks2019]
GO
SELECT * FROM sys.fulltext_catalogs

Ниже показан вывод информации о полнотекстовом каталоге.



Включение функции полнотекстового каталога в базе данных


Здесь я покажу как включить полнотекстовый поиск для базы данных, у которой эта функция выключена.

--Включение полнотекстового поиска для базы данных "AdventureWorks2019" 
USE [AdventureWorks2019]
GO
EXEC sp_fulltext_database 'enable'

Мы используем вышеприведенную команду для включения полнотекстового поиска для базы данных.



Я проверил полнотекстовый поиск для всех бах данных с помощью следующей команды. Видно, что полнотекстовый поиск включен для базы данных AdventureWorks2019.



Теперь, если выполнить хранимую процедуру sp_help_fulltext_catalogs для вывода информации о каталоге, то эта процедура выдаст результат, а не ошибку, поскольку функция полнотекстового поиска была включена для этой базы данных.

Категории: T-SQL

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.