Конфігурування каталогів повнотекстового пошуку

Каталог повнотекстового пошуку являє собою набір індексів для однієї бази даних SQL Server Кожен каталог може зберігати індекси для декількох таблиць, але кожна таблиця привязана тільки до одного каталогу Зазвичай один каталог обслуговує всі повнотекстові індекси бази даних, хоча з метою підвищення продуктивності для особливо великих таблиць (з мільйонами рядків) можуть виділятися окремі каталоги

Каталоги можуть індексувати тільки для користувача таблиці (не вистави, не тимчасові таблиці, що не табличні змінні і не системні таблиці)

Створення каталогу за допомогою майстра

Хоча створення та конфігурування каталогів повнотекстового пошуку відносно не складно виконати і програмним шляхом, це завдання виконується один раз, і для неї цілком достатньо виклику спеціального майстра (Якщо сценарій не вимагає численних запусків)

Цей майстер запускається у вікні Object Explorer утиліти Management Studio Для цього потрібно виділити відповідну таблицю і в її контекстному меню вибрати команду Full-Text Index ^ Define Full-Text Index

При конфігуруванні каталогу повнотекстового пошуку майстер проходить кілька етапів

1 Виберіть базу даних, якій належатиме каталог

2 Виділіть таблицю для включення в каталог

3 Задайте унікальний індекс, який буде використовувати механізм повнотекстового пошуку Як правило, для такого індексу краще використовувати первинний ключ, проте іноді виявляється достатньо і індексу по одному стовпцю, якщо він не містить порожніх і дубльованих значень Якщо таблиця використовує складовою первинний ключ, то для повнотекстового пошуку можна використовувати інший унікальний індекс

4 Виділіть стовпці, які будуть використовуватися для індексу (рис 131), при цьому можна використовувати дані будь-яких символьних типів (char, nchar, varchar, nvarchar, text, ntext і xml), а також двійкові зображення (image) (про індексування двійкових даних мова піде в останньому розділі цієї глави) Також потрібно вибрати мову для сканування слів, хоча компютер за замовчуванням може автоматично впоратися і з цим завданням

Puc 131 Для індексації може бути використаний будь допустимий стовпець, перерахований у вікні майстра

Повнотекстовий пошук може читати документи, збережені в шпальтах з типом даних image Використання повнотекстового пошуку з особливо великими двійковими обєктами ми обговоримо в одному з наступних розділів

1&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Бажано встановити відстеження змін при цьому будь-які зміни в даних будуть відразу ж відображатися в каталозі Якщо не включати відстеження змін, то оновлення каталогу доведеться виконувати вручну

2&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Виберіть існуючий каталог або створіть новий

3&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Не створюйте розклад заповнення каталогу: існують кращі способи підтримки його в оновленому стані (Про стратегії підтримки повнотекстового індексу ми поговоримо трохи пізніше в цьому розділі)

4&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Завершіть роботу майстра

Коли робота майстра завершиться, каталог буде створений, але поки залишиться порожнім Для початкового заповнення каталогу клацніть правою кнопкою миші на таблиці і виберіть у контекстному меню пункт Full-Text Index Table ^ Enable Full-Text Index, а потім Full-Text Index Table ^ Start Full Population SQL Server почне передавати дані службі повнотекстового пошуку для індексації Залежно від обсягу даних в індексованих стовпцях процес заповнення каталогу може тривати як кілька секунд, так і декілька годин

Створення каталогу мовою T-SQL

Для реалізації повнотекстового пошуку з можливістю повторення на інших серверах краще використовувати мову SQL Створення каталогу за допомогою програми передбачає практично ті ж дії, що і при використанні майстра Для створення і конфігурації повнотекстових індексів використовується набір системних збережених процедур У наступній послідовності дій продемонстровано, як створити повнотекстовий каталог в навчальній базі даних байок Езопа (Aesop)

1 Відкрийте базу даних, в якій потрібно конфігурувати повнотекстовий пошук:

USE AESOP

EXEC sp_fulltext_database enable

Кожне з описуваних дій може зайняти кілька секунд SQL Server На замітку ініціює процес, але не очікує його завершення Якщо конфігурування здійснюється програмним шляхом, ви можете вручну вставити необхідну паузу

2 Створіть повнотекстовий каталог:

EXEC sp_fulltext_catalog AesopFable, create

3 Виберіть таблицю для повнотекстового пошуку:

EXEC sp_fulltext_table

‘Fable, create, AesopFable, FablePK

4 Додайте в повнотекстовий каталог стовпці:

EXEC sp_fulltext_column Fable, Title, add

EXEC sp_fulltext_column Fable, Moral1, add

EXEC sp_fulltext_column Fable, FableText, add

Збережена процедура sp_fulltext_column має два інших параметра, що визначають мову сканування та інформацію про індексацію зображень Повний синтаксис цієї процедури має наступний вигляд:

sp_fulltext_column @ tabname = імя_ та бліци,

@ Colname = імя_стовпця,

@ Action = дію,

@ Language = мову1,

@type_colname =1тіп_імені_столбца1

Параметр дія може приймати значення add або drop1 Повнотекстовий пошук автоматично сканує інформацію на наступних мовах

Нейтральний – 0 Японська – 0x0411, 1041

Спрощений китайський – 0x804, 2052 Корейська – 0x412, 1042

Традиційний китайський – 0x0404, 1028 Сучасний іспанський – ОхОсОа, 3082 Данська – 0x0413, 1043 Шведська – 0x041 d, 1053

Англійська (Великобританія) – 0x0809, 2057 Тайська Англійська (США) – 0x0409, 1033 Китайська (Гонконг)

Французька – 0x040с, 1036 Китайська (Макао)

Німецька – 0x0407, 1031 Китайська (Сінгапур)

Італійська – 0x410, 1040

Вибір мови визначає правила переносу слів, а також їх видозмінені форми Якщо в базі даних використано кілька мов або непідтримуваний мову, вибирайте нейтральний Підтримуваний шістнадцятковий код передається параметру системної збереженої процедури sp_fulltext_columns Всі стовпчики таблиці повинні використовувати один і той же мова

5 Активізуйте повнотекстовий каталог:

EXEC sp_fulltext_table 1 Fable 1, activate 1

Незважаючи на те що повнотекстовий каталог створений, він поки що не заповнений Для його заповнення запустіть наступну збережену процедуру:

EXEC sp_fulltext_table Fable, start_full

Приміщення даних в повнотекстовий індекс

Повнотекстові індекси підтримуються зовнішньою службою і оновлюються тільки тоді, коли SQL Server передає їй нові дані Це можна розцінювати і як гідність, і як недолік З одного боку, це значить, що повнотекстовий індекс не гальмує роботу з великими текстовими базами даних, з іншого – те, що SQL Server не підтримує в повнотекстових індексах режим реального часу Якщо користувач вводить дані, а потім виконує пошук, заздалегідь не оновивши повнотекстовий індекс, то нова інформація знайдена не буде

Будь повнотекстовий індекс створюється порожнім, і якщо в таблицях SQL Server містяться дані, то вони повинні бути виштовхнуті в індекс допомогою повного заповнення Повне заповнення заново инициализирует індекс і заповнює його даними про всі рядках Повне заповнення можна виконати як програмним шляхом, так і в утиліті Management Studio Так як виштовхування даних управляється сервером, одночасно службі повнотекстового пошуку надсилається тільки одна таблиця, незалежно від того, скільки їх має бути проіндексовано в каталозі Якщо повнотекстовий індекс створюється для порожньої таблиці, то повне заповнення не потрібно

Існують два основні методи виштовхування поточних змін у повнотекстовий індекс

■ Поступове заповнення Поступове заповнення використовує час створення для виявлення рядків, створених після останнього заповнення Цей метод можна використовувати в утиліті Management Studio, в програмному коді Т-SQL, а також у завданнях агента SQL Server Agent (зазвичай такі завдання плануються на вечірній час) Для послідовного заповнення потрібна наявність в таблиці стовпця типу timestamp

Поступове заповнення виявляє дві проблеми По-перше, між введенням даних і можливістю повнотекстового пошуку існує часовий розрив По-друге, всі оновлення консолідуються в єдиний процес, який може відняти масу процесорного часу У завантажених базах даних існує вибір між поступовим заповненням щовечора і виділенням для цієї операції окремого дня, щоб не впливати на загальну продуктивність сервера

■ Відстеження змін і фонове заповнення SQL Server може відстежувати зміни даних у стовпцях, по яких створені повнотекстові індекси Як тільки зміна виявлено в деякій рядку, індекс буде оновлений тільки по ній Незважаючи на те що цей метод також витрачає ресурси компютера, на практиці ефект від його використання майже не помітний Повнотекстове оновлення не викликається тригером, так що транзакціях оновлення не доводиться чекати, поки дані будуть виштовхнуті в повнотекстовий індекс Замість цього оновлення повнотекстового індексу виконується у фоновому режимі практично відразу ж після транзакції SQL DML В результаті завантаження процесора балансується, і індексація відбувається практично в режимі реального часу

Якщо проект бази даних передбачає пошук слів у стовпчиках, то використання повнотекстової індексації з відстеженням змін і заповненням у фоновому режимі є кращою стратегією підвищення продуктивності

Обслуговування каталогу в Management Studio

У утиліті Management Studio повнотекстовий пошук виконується за допомогою клацання правою кнопкою миші і вибору команди в контекстному меню кожної таблиці Всі команди обслуговування повнотекстового пошуку зібрані в підміню Full-Text Index Table

■ Define Full-Text Indexing on Table Запуск майстра повнотекстової індексації так, як було описано вище в цьому розділі

■ Edit Full-Text Indexing Запускає майстра повнотекстової індексації для зміни каталогу виділеної таблиці

■ Remove Full-Text Indexing from a Table Видаляє виділену таблицю з її каталогу

■ Start Full Population Ініціює заповнення даних з усіх рядків виділеної таблиці в каталог повнотекстової індексації

■ Start Incremental Population Ініціює заповнення всіх даних, змінених після останнього заповнення повнотекстового індексу

■ Stop Population Зупиняє будь поточний процес заповнення

■ Change Tracking Виконує повне або поступове заповнення, після чого включає відстеження змін даних для поновлення індексів

■ Update Index in Background Запускає процес відновлення рядків, позначених відстеженням зміни даних

■ Update Index Запускає оновлення всіх рядків, позначених відстеженням змін, в повнотекстовому індексі

Обслуговування каталогу в програмному коді T-SQL

Всі перераховані вище команди меню утиліти Management Studio можна виконати і програмним шляхом Наведені нижче фрагменти демонструють використання команд управління каталогом на прикладі навчальної бази даних байок Езопа

■ Повне заповнення

EXEC sp_fulltext_table 1 Fable, start_full

■ Поступове заповнення

EXEC sp_fulltext_table Fable1, start_incremental1

■ Видалення повнотекстового каталогу

EXEC sp_fulltext_table AesopFable1, drop

■ Відстеження змін і фонове оновлення

EXEC sp_fulltext_table Fable, Start_change_tracking

EXEC sp_fulltext_table Fable,

‘Start_background_updateindex

На додаток збережені процедури містять такі розширені функції обслуговування каталогів

■ Перебудова Ця команда видаляє і повністю перевизначає повнотекстовий каталог, але не заповнює його індексами, – після цієї операції потрібно виконувати повне заповнення Перевага перевизначення каталогу полягає в тому, що воно автоматично переконфигурирует таблицю і стовпці, гарантуючи чистоту внутрішньої структури каталогу

EXEC sp_fulltext_catalog AesopFable, rebuild

■ Очищення невикористовуваних повнотекстових каталогів Наступна команда очищає невживані повнотекстові каталоги:

EXEC sp_fulltext_service clean__up

Починаючи з версії SQL Server 2000 збережена процедура sp_help забезпечує користувачів інформаційної довідкової підтримкою Версії цієї процедури наступні

■ sp_help_fulltext_catalogs Ця системна збережена процедура повертає інформацію про каталог, включаючи статус поточного заповнення

EXEC sp_help_fulltext_catalogs AesopFable

Результат виконання цієї процедури наступний:

NUMBER

FULLTEXT

ftcatid NAME            PATH                             STATUS TABLES

5        AesopFable C:\Program Files                   0           1

\Microsoft SQL Server \MSSQL\FTDATA

Стовпець статусу заповнення повертає наступні стани каталогу

• 0 – немає активності

• 1 – йде повне заповнення

• 2 – заповнення призупинено

• 3 – перевантаження

• 4 – відновлення

• 5 – закритий

• 6 – йде поступове наповнення

• 7 – створення індексу

• 8 – диск сповнений, робота призупинена

• 9 – відстеження змін

■ sp_help_fulltext_tables Цей варіант збереженої процедури повертає інформацію про таблиці, занесених в каталог

EXEC sp_help_fulltext_tables AesopFable

Результат (форматований):

FULLTEXT

KEY   FULLTEXT FULLTEXT FULLTEXT

TABLE TABLE INDEX KEY          INDEX       CATALOG

OWNER NAME NAME                  COLID      ACTIVE NAME

dbo Fable FablePK 1                       1                AesopFable

■ sp_help_fulltext_columns Повертає інформацію про стовпці, включених в каталог

EXEC sp_help_fulltext_columns fable

Результат (форматований і скорочений):

TABLE_ FULLTEXT BLOBTP

OWNER NAME COLUMNNAME COLNAME LANGUAGE

dbo Fable Title                  NULL        1033

dbo Fable Moral                NULL        1033

dbo Fable FableText NULL                 1033

Файли шумів

Коли кілька років тому я писав процедуру пошуку слів, то з метою оптимізації та підвищення продуктивності виключив такі слова, як a, the і of Як тільки слово було просканувати, я перевіряв його наявність в чорному списку і в разі отримання позитивного результату переходив до наступного слова Таким чином, час сканування звичайних сайтів скоротилося більш ніж удвічі, а таблиця частоти слів стала значно коротший

Повнотекстовий пошук використовує аналогічний підхід, зберігаючи список ігнорованих слів в так званому файлі шуму Занесені в цей файл слова повністю ігноруються повнотекстових пошуком Насправді, якщо запит містить ігноровані слова, SQL Server генерує помилку

Рішення включати слово в файл шуму приймається на підставі частоти його використання та відносної важливості Якщо слово поширене, то воно буде часто зустрічатися в тексті і тим самим знижувати загальну продуктивність сервера З цієї причини такі слова краще включати у файл шуму

Як альтернативу можна виконувати пошук і у файлі шуму Наприклад, якщо для бази даних важливо визначення мова С, букву С слід видалити з файлу шуму

Так як файли шуму є звичайними текстовими файлами, вони повинні задовольняти вимогам конкретних програм Перед редагуванням файлу шуму потрібно зупинити механізм повнотекстового пошуку Якщо установка SQL Server виконувалася в каталог, запропонований за умовчанням, то файл шуму можна знайти за наступним шляхом:

C:\Program Files\Microsoft SQL Server\MSSQL\FTDATA\noiseENUtxt

Для тестування файлу шуму зупиніть механізм повнотекстового пошуку в утиліті SQL Server Configuration Manager, додайте в файл-яке слово і спробуйте виконати по ньому пошук Якщо SQL Server видасть наступну помилку, значить, слово було додано в коректний файл шуму:

Server: Msg 7619, Level 16, State 1, Line 1 A clause of the query contained only ignored words

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*