Database Programming & Design

       

Реляционные расширители


На основе представленной выше объектной инфраструктуры могут

создаваться реляционные расширители для поддержки конкретных

прикладных областей. Далее будут обсуждены свойства одного из

таких расширителей - 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;



Содержание раздела