Программирование >>  Oracle 

1 ... 276 277 278 [ 279 ] 280 281 282 ... 469


1250

Глава 17

3 in Redwood Shores, California.);

1 row created. SQL> insert into mytext

2 values(2, Oracle has many training centers around the world.) ; 1 row created. SQL> commit; Commit complete.

SQL> select id

2 from mytext

3 where instr(thetext, Oracle) > 0;

SQL> select id

2 from mytext

3 where thetext like %Oracle%;

С помощью встроенной функции SQL INSTR можно искать вхождения подстроки в строке. С помощью оператора LIKE можно также искать строки, соответствующие шаблону. Во многих случаях функция INSTR или оператор LIKE идеально подходят для решения поставленной задачи, и все прочие средства просто избыточны, особенно при поиске в сравнительно небольших таблицах.

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

найти все строки, содержащие слово Oracle рядом со словом Corporation так, что их разделяет не более двух слов;

найти все строки, содержащие слово Oracle или слово California , отсортировав результаты по релевантности;

найти все строки со словами, имеющими корень train (например, trained, training, trains);

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

Эти запросы - лишь малая часть того, что нельзя сделать традиционными средствами, но легко делается с помощью компонента interMedia Text. Чтобы продемонстрировать, насколько легко interMedia позволяет отвечать на приведенные выше запросы, необходимо сначала создать индекс interMedia Text по нашему текстовому столбцу:



interMedia 1251

Чтобы использовать PL/SQL-пакеты компонента interMedia Text, пользователю должна быть предоставлена роль С7ХАРР.

JQl> create index mytext idx

2 on mytext(thetext)

3 indextype is CTXSYS.CONTEXT

Index created.

Создав индекс нового типа, CTXSYS.CONTEXT, мы обеспечили возможность эффективного поиска текста для существующей таблицы. Теперь можно использовать множество операторов, поддерживаемых компонентом interMedia Text, для сложной обработки текстовых данных. Следующие примеры демонстрируют использование оператора CONTAINS для ответа на четыре представленных ранее запроса (не обращайте пока внимания на особенности синтаксиса SQL-операторов, поскольку он будет подробно рассмотрен далее):

SQI> select id

2 from mytext

3 where contains(thetext, near((Oracle,Corporation),10)) >0;

SQL> select score(l) , id

2 from mytext

3 where contains(thetext, oracle or California, 1) > 0

4 order by score(l) desc

SCORE(l) ID

SQL> select id

2 from mytext

3 where contains(thetext, $train) > 0;

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



1252

Глава 17

Управление разнородными документами

Помимо возможности индексировать текстовые столбцы в базе данных компонент interMedia Text включает набор фильтров документов для множества форматов. Компонент interMedia Text будет автоматически обрабатывать документы Microsoft Word 2000 для Windows, Microsoft Word 98 для Macintosh, электронные таблицы Lotus 1-2-3, документы в формате Adobe Acrobat PDF и даже файлы презентаций Microsoft PowerPoint. Всего в составе компонента interMedia Text поставляется более 150 фильтров для разных типов файлов и документов.

Наличиетех или иныхфильтровзависит от версии Oracle 8i. Например, версии Oracle 8.1.5 и Oracle 8.1.6были выпущены раньше, чем появился формат Microsoft Word2000 для Windows. Поэтому в составе компонента interMedia Text версии 8.1.5 или 8.1.6 нет фильтра для этого типа документов, а в составе interMedia Text в Oracle 8.1.7- уже есть.

Технология фильтрования, включенная в состав interMedia Text, получена по лицензии от корпорации Inso Corporation и с точки зрения точности и эффективности я считаю ее лучшей из имеющихся на рынке. Список текущих поддерживаемых форматов файлов представлен в приложении к руководству Oracle8i interMedia Text Reference.

На момент написания этой книги фильтры Inso не б1лидоступнына платформе Linux, и перенос их на эту платформу не планировался, что очень печально. Это не означает, что компонент interMedia Text нельзя использовать на платформе Linux, но если используется версия Oracle 8i для Linux, придется либо ограничиться текстовыми и HTML-документами, либо создавать так называемые пользовательские фильтры, объекты USER FILTER.

Индексирование текста из различных источников данных

Компонент interMedia Text обеспечивает не только хранение файлов в базе данных. Источник данных (datastore object) interMedia Text позволяет указать, где именно должен храниться текст или данные. Источник данных обеспечивает необходимую для индекса interMedia Text информацию о том, где находятся данные. Эту информацию можно задать только при создании индекса.

Как было показано в предыдущем примере, данные для индекса interMedia Text могут поступать непосредственно из базы данных - храниться в столбце таблицы. Этот источник данных, DIRECT DATASTORE, является стандартным, если явно не указан другой источник. Столбец может быть типа CHAR, VARCHAR, VARCHAR2, BLOB, CLOB или BFILE. Можно создать индекс interMedia Text и по столбцу типа LONG или LONG RAW, но с момента в1хода версии Oracle 8 эти типы считаются устаревшими, и их не стоит использовать во вновь создаваем1х приложениях.

Еще один полезный тип источника данных для текста, хранящегося в столбцах таблиц базы данных, - DETAIL DATASTORE. Отношение главный/подчиненный часто



1 ... 276 277 278 [ 279 ] 280 281 282 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика