Microsoft SQL Server. Основы полнотекстового поиска (Full-Text Search)

Microsoft SQL Server. Основы полнотекстового поиска (Full-Text Search)

Автор: Вячеслав

Не буду описывать, что такое полнотекстовый индекс, хотя немного можно цитатой из BOL:

“Полнотекстовые запросы выполняют лингвистический поиск в текстовых данных в полнотекстовых индексах путем обработки слов и фраз в соответствии с правилами данного языка, например английского или японского. Полнотекстовые запросы могут включать простые слова и фразы или несколько форм слова или фразы.”

Для работы полнотекстового поиска  необходимо, чтобы работала служба MSSQLFDLauncher (fdhost.exe), которая необходима для фильтрации, разбиения по словам данных из таблиц.

В отличие, от MS SQL 2005, задачи которые выполнялись службой  MSFTESQL , теперь выполняются процессом  sql server.

Создание полнотекстового индекса выполняется по следующим шагам:

  1. Создание полнотекстового каталога
  2. Создание полнотекстового индекса
  3. Заполнение полнотекстового индекса
  1. Итак, создадим полнотекстовый каталог:

Его можно создать либо из графического интерфейса(БД->Storage ->Full Text Catalogs), либо командой t-sql:

  1. Создание полнотекстового индекса:

Где Description language 1033 язык данных ключа уникального индексе AK_ProductDescription_rowguid , который будет проиндексирован. Список поддерживаемых языков для полнотекстового индексирования можно получить из представления  sys.fulltext_languages.

CHANGE_TRACKING MANUAL –устанавливаем, что обновление индекса будет

Индекс создан, сами полнотекстовые индексы модно получить из представления  sys.fulltext_indexes.

  1. После этого можно наш индекс заполнять данными.

При создание индекса, индекс заполняется автоматически, так же при создание мы указываем тип обновления индекса, в примере:

WITH (CHANGE_TRACKING MANUAL) – обновление вручную

Еще варианты AUTO и OFF.

Рекомендуется запускать настраивать индекс с параметром “Manual”, но если таблица, на которую настроен полнотекстовый индекс, обновляется мало, можно и “AUTO”. Дело в том , что обновление полнотекстового индекса происходит немного по другому, в отличие от кластерных \не кластерных индексов.

Заполнение индекса  новыми данными или обновление информации , выполняется командой:

 

Запросы с полнотекстовым индексом:

Самый простой способ – это использование  freetext и CONTAINS

Разница, что например для второго запроса не выдадут результаты со словом , например,  “bikes”.

Еще одно замечание, по умолчанию при создание индекса, если явно не указано, индекс сопоставляется с системным стоп-листом “system”, п о этому стоп-листу не будут находиться , например, числовые значение(раз, два и т.д.)

Указать стоп лист можно либо при создание полнотекстового индекса, либо если уже индекс командой:

Еще несколько примеров по запросам к полнотекстовым каталогам:
есть таблица со следующими данными:
id val
1 раз
2 Раз
3 Раз два
4 Раз, два
5 Разовый, два
6 Разовый, двоичный
7 тРи
8 раз два три четеры
9 Раз, два, три, четыре
10 Раз, два, три, четыре, пять
11 Первый второй третий
12 стоп
13 стоп два раза
14 стоппп
15 стоп — стоять
16 стоп снова
17 два, раз, ноль
18 два, раз
19 два, ноль, раз

1-й  запрос к данной таблице:

Результат:
id val
1 раз
2 Раз
3 Раз два
4 Раз, два
8 раз два три четеры
9 Раз, два, три, четыре
10 Раз, два, три, четыре, пять
17 два, раз, ноль
18 два, раз
19 два, ноль, раз

2-ой запрос:

Результат:
id val
3 Раз два
4 Раз, два
8 раз два три четеры
9 Раз, два, три, четыре
10 Раз, два, три, четыре, пять
17 два, раз, ноль
18 два, раз
19 два, ноль, раз

3 -й запрос:

Результат:
id val
3 Раз два
4 Раз, два
5 Разовый, два
8 раз два три четеры
9 Раз, два, три, четыре
10 Раз, два, три, четыре, пять
13 стоп два раза
17 два, раз, ноль
18 два, раз
19 два, ноль, раз

По базовым параметрам службы полнотекстового поиска пока все.

P.S. Всё тестирование проводилось на SQL Server 2008

Запись опубликована в рубрике Полезно и интересно с метками . Добавьте в закладки постоянную ссылку.

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

Войти с помощью: