Фразовые индексы

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

Поскольку в качестве документов могут использоваться документы разных форматов (TXT, DOC, RTF, PDF, HTML и т.д.), то СУБД ЛИНТЕР использует набор специализированных фильтров. Фильтром в СУБД ЛИНТЕР является компонент ядра СУБД (динамическая библиотека – для внешних фильтров; модуль ядра – для встроенных фильтров), который извлекает из документа его текстовое содержимое (в виде потока слов) и свойства (автор, размер, дата создания и т.д.). На вход фильтру подается исходный документ, на выходе возвращается «чистый» текст (т.е. без всяких элементов форматирования). Схема работы фильтра на примере документов WinWord приведена на рисунке 5. Нужные фильтры устанавливаются при настройке СУБД или непосредственно пользователем БД с помощью специальных SQL-операторов.

Схема фильтрации WinWord-документов в СУБД ЛИНТЕР
Рисунок 5. Схема фильтрации WinWord-документов в СУБД ЛИНТЕР

СУБД ЛИНТЕР имеет набор встроенных фильтров для некоторых наиболее распространенных форматов документов, а именно: ASCII (в том числе, в кодировке ANSI, KOI8-R), HTML/XML (в коде ASCII), UNICODE, HTML/XML (в коде UNICODE), RTF, PDF, XLS, XLSX, PPT, PPTX, DOC, DOCX, Open Office, PS.

Тем не менее, не все они обязательно должны использоваться. Это потенциально возможный набор. Чтобы фильтр стал доступным для применения, информация о нем должна быть помещена в БД специальным SQL-запросом. При необходимости пользователи БД могут разрабатывать собственные фильтры для своих специфических форматов данных и включать их в состав СУБД. Для поддержки полнотекстового поиска должны быть выполнены SQL-скрипты search.sql и default.sql.

Для данных типа EXTFILE (внешний файл) СУБД может автоматически подобрать нужный фильтр в зависимости от расширения файла.

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

  • обычное индексирование: содержание поля заносится в индекс целиком. Из словосочетания «база данных» формируется одно индексное значение – «база данных». В этом случае для правильного поиска нужно вводить все слова в соответствующем порядке и с соответствующими разделителями. Предикаты LIKE и SIMILAR также позволяют использовать обычный индекс для поиска данных, соответствующих шаблонам;

  • фразовое, или полнотекстовое индексирование: каждое слово, входящее в документ, индексируется отдельно, разделители не учитываются. Таким образом, из словосочетания «база данных» в индекс войдут два слова: «база» и «данных». Предикат фразового поиска CONTAINS требует обязательного существования соответствующего фразового индекса. При поиске с использованием этого предиката могут как задаваться, так и не задаваться порядок введенных слов, расстояние между словами и т.д.

При поиске данных (например, документов), содержащих указанные в условии поиска слова, СУБД ЛИНТЕР будет автоматически использовать построенный индекс.