Статьи

Sql Server. Полнотекстовый поиск. Часть 1. Настройка

Как я уже упоминал ранее , полнотекстовый поиск в Sql Server позволяет разработчикам легко создавать очень интересные функции. И, в отличие от многих других полнотекстовых реализаций, он не ограничивается простыми текстовыми полями. Он также может выполнять поиск в двоичных полях с правильными настройками. Само собой разумеется, есть несколько способов сделать так, чтобы полнотекстовые индексы работали и использовали их в своих интересах. В этом посте я расскажу как получить Full-Tex

Начиная

Во-первых, вам понадобится копия Sql Server 2000 или 2005 Standard Edition. MSDE или Sql Express не имеют полнотекстовых возможностей. Чтобы включить полнотекстовый поиск, необходимо сделать несколько вещей.

  • Включить полнотекстовый поиск в базе данных.
  • Создать полнотекстовый каталог.
  • Включите полнотекстовый поиск по конкретным столбцам в ваших данных.

Для этого мы можем запустить некоторые системные хранимые процедуры. Я должен отметить, что в 2005 году они были оценены в пользу операторов DDL, но они все еще работают и их немного легче усваивать. Вот пример SQL, необходимого для создания полнотекстового индекса в базе данных:

exec sp_fulltext_database 'enable' exec sp_fulltext_catalog 'Catalog_Name', 'create' 

Особенности дизайна стола

Как только полнотекстовый индекс будет создан, вы можете начать индексирование столбцов. Но давайте не будем забегать вперед. Прежде всего, использование полнотекстовой индексации требует одного уникального ключа в таблице. Во-вторых, для любой таблицы, в которой вы используете полнотекстовые индексы, у вас действительно должен быть столбец TIMESTAMP. Это небольшой двоичный столбец, который автоматически обновляется при каждом изменении строки. Это необходимо, поскольку он действует как флаг для механизма индексирования, чтобы позволить ему постепенно индексировать таблицу.

Есть еще одно соображение относительно использования полнотекстовой индексации для двоичных полей, таких как текстовые документы, хранящиеся в базе данных. И это соображение, у вас должно быть текстовое поле с расширением файла (например, «doc» для слова). Это связано с тем, что индексация должна знать, с каким файлом она имеет дело, чтобы проанализировать файл и найти данные. Sql Server из коробки может индексировать текстовые файлы, HTML-файлы и документы Word. Но его можно расширить с помощью IFilters . Например, Adobe предоставляет PDF IFilter для вашего использования.

Включение полнотекстовой индексации для таблицы и столбцов

Допустим, у нас есть довольно простая таблица, которую мы хотим проиндексировать, document_attachments. Имеет шесть полей:

  • Id (INT IDENTITY NOT NULL, первичный ключ)
  • FileName (varchar (255) NOT NULL)
  • FileDescription (varchar (1000) NULL)
  • FileExtension (varchar (10) NOT NULL)
  • SaveStamp (TIMESTAMP)
  • FileData (ИЗОБРАЖЕНИЕ)

Чтобы разрешить полнотекстовые запросы к вашей таблице, вы должны сначала включить таблицу для полнотекстовой индексации, а затем включить полнотекстовые указания для определенных столбцов. Если бы мы хотели создать полнотекстовый индекс в полях FileDescription & FileData, мы бы использовали следующий T-SQL:

exec sp_fulltext_table @tabname='document_attachments', @action='create', @ftcat=[CatalogName], @keyname=[Name of Primary Key index] exec sp_fulltext_column @tabname='document_attachments', @colname='FileName', @action='add' exec sp_fulltext_column @tabname='document_attachments', @colname='FileData', @action='add', @type_colname='FileExtension'
exec sp_fulltext_table @tabname='document_attachments', @action='create', @ftcat=[CatalogName], @keyname=[Name of Primary Key index] exec sp_fulltext_column @tabname='document_attachments', @colname='FileName', @action='add' exec sp_fulltext_column @tabname='document_attachments', @colname='FileData', @action='add', @type_colname='FileExtension' 

Вопросы индексации

Теперь, прежде чем использовать какой-либо полнотекстовый каталог, он должен быть проиндексирован. Здесь есть два отдельных сценария. Для «обычных полей», то есть полей, которые не являются ИЗОБРАЖЕНИЕМ или ТЕКСТОМ, Sql Server может автоматически отслеживать изменения в столбцах. И, если вы работаете с Sql 2005, вам действительно следует использовать VARCHAR (MAX) и VARBINARY (MAX), поэтому для некоторых это не будет проблемой. Но тем из нас, кто все еще работает над Sql 2000, потребуется настроить расписание индексирования для любого из длинных текстовых или двоичных столбцов старой школы, чтобы все было свежо. Как часто индексировать, зависит от приложения и ваших требований. Помните, что это немного дорогостоящий процесс, поэтому вы не хотите запускать его каждые 15 секунд, чтобы сохранить «свежесть».

В любом случае, чтобы включить отслеживание изменений (автоматическое индексирование) для таблицы, используйте следующий T-SQL:

exec sp_fulltext_table 'document_attachments', 'start_change_tracking'
exec sp_fulltext_table 'document_attachments', 'start_change_tracking' 

Что касается настройки расписания, лучше всего запустить менеджер предприятия, найти свой полнотекстовый каталог, щелкнуть по нему правой кнопкой мыши и выбрать « Расписания». Затем настройте график, который вы считаете подходящим.

Но подождите, Уайетт! Разве нет больше!

Почему да, это еще не все. Оставайтесь с нами для следующей версии полнотекстовых подсказок сервера Sql: использование полнотекстовых запросов для развлечения и получения прибыли.

Спасибо и пните, если вам это нравится .