понедельник, 5 января 2009 г.

Использование полнотекстовых индексов (full-text indexing)

Исправлено 23-09-2010

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

Компонент полнотекстового поиска использует полнотекстовые индексы, которые отличается от обычных, имеющих B-tree структуру. Полнотекстовом индексе текст разбивается на лексемы и поиск происходит по ним. В отличии от обычных индексов, полнотекстовые имеют ряд особенностей:


  • они распологаются в полнотекстовом каталоге (логическая структура для хранения полнотекстовых индексов, распологается отдельно от БД)
  • допустимо создать только один полнотекстовый индекс в таблице,
  • для создания полнотекстового индекса необходимо наличие в таблице столбца с уникальными занчениями (не содержажего NULL)
  • Заполнение индекса может осуществляться автоматически, в ручную и по расписанию

Компонент полнотекстового поиска имеет ряд хранимых процедур для конфигурирования, которые описаны в документации.

Конфигурировать компонеты полнотекстого поиска можно также программно, при помощи SMO, этот вариант рассмотрен тут.

Включить full-text indexing для текущей базы данных:

exec sp_fulltext_database 'enable'

Создать полнотекстовый каталог

exec sp_fulltext_catalog 'catalogname', 'create'

Создать полнотекстовый индекс для таблицы

exec sp_fulltext_table 'tablename', 'create','catalogname', 'indexname'

Добавить колонку таблицы в полнотекстовый индекс

exec sp_fulltext_column 'tablename', 'columnname', 'add'

Активировать полнотекстовый индекс для таблицы

exec sp_fulltext_table 'tablename', 'activate'

Включить автоматическое заполнение полнотекстового индекса при изменении таблицы

exec sp_fulltext_table 'tablename','start_change_tracking'
exec sp_fulltext_table 'tablename','start_background_updateindex'

Like или FullText Search
по функциональности, основным конкурентом полнотекстовому индексу является Like

- LIKE Transact-SQL работает только на последовательностях шаблонов
- LIKE нельзя использовать в запросах к форматированным двоичным данным
- LIKE к большому количеству неструктурированных текстовых данных выполняется гораздо медленнее, чем эквивалентный полнотекстовый запрос к тем же данным


Ссылки:

SQL Server 2008 Full-Text Search: Internals and Enhancements

http://msdn.microsoft.com/ru-ru/library/ms142497.aspx

Performing SQL Server CONTAINS Searches

Gathering status and detail information for all Full Text Catalogs for an instance of SQL Server

Best Practices for Integrated Full Text Search (iFTS) in SQL 2008

Full-Text Index Properties (General Page)

Breaking Changes to Full-Text Search in SQL Server 2008 R2

SQL Server Full Text Search - A clause of the query contained only ignored words


Полнотекстовый поиск: MS Full-Text Search

SQL Server 2008 Full-Text Search: Internals and Enhancements

Архитектура компонента Full-Text Search

Устранение неполадок компонента Full-Text Search

Комментариев нет:

Locations of visitors to this page