Реляционные расширители
На основе представленной выше объектной инфраструктуры могут
создаваться реляционные расширители для поддержки конкретных
прикладных областей. Далее будут обсуждены свойства одного из
таких расширителей - Text Extender, а также приведена краткая
характеристика других расширителей, существовавших для DB2 к
моменту написания статьи.
Text Extender. Этот расширитель поддерживает быстрый контекстный поиск в больших текстовых документах. Не требуется, чтобы
документы хранились в специальном формате; могут быть
использованы существующие документы во многих популярных
форматах, включая Microsoft Word, Word Perfect и AmiPro. Для
использования Text Extender документы должны быть загружены в
столбец таблицы DB2 с применением типа данных символьных строк
(например, CLOB). Расширитель создает специального рода индекса
на хранимых документах и обеспечивает набор функций, использующих
этот индекс для поиска документов, содержащих желаемые комбинации
слов и фраз.
Поскольку документы используемые с применение Text Extender
хранятся в столбце таблицы DB2, в запросе могут комбинироваться
условия, основанные на содержании документа, и условия,
накладываемые на другие столбцы данных. Например, таблица
журнальных статей может включать столбцы, содержащие название
журнала, дату публикации, название и полный текст каждой статьи.
Можно сформулировать запрос по поводу статей, напечатанных в
Newsweek в 1990 г. и содержащих слова "Iraq" и "embargo" в одном
параграфе.
Подобно всем UDF, функции, реализованные в Text Extender, могут
использоваться в обычных операторах SQL. Одной из наиболее важных
таких функций является функция CONTAINS, возвращающая значение 1,
если данный документ соответствует заданному шаблону поиска.
Шаблон поиска может содержать несколько фраз, соединенных
операциями "&" (и), "|" (или) и NOT. В шаблоне можно также
указать, что определенные слова или фразы должны встречаться в
одном предложении или параграфе. Например, следующий запрос
предназначен для поиска статей, содержащих слова "cooking" и либо
"Chinese" либо "Japanese" в любом порядке, но не содержащих слово
"sishi":
SELECT magazine, date, title
FROM articles
WHERE CONTAINS(articletext,
'("cooking"
& ("Chinese" | "Japanese")
& NOT "sushi")') = 1;