Базы данных Oracle - статьи

         

Другие источники документов


Пример таблицы, рассмотренной в , не вполне реалистичен, так как размер документов в нем ограничивался максимум четырьмя тысячами байтов для типа VARCHAR2. В то же время Oracle позволяет создавать индекс типа CTXSYS.CONTEXT еще на поля типа CLOB, XMLTYPE и даже BFILE и URITYPE. Выполним:

TRUNCATE TABLE docs; DROP INDEX docs_vc2doc_idx; ALTER TABLE docs DROP COLUMN vc2doc; ALTER TABLE docs ADD ( clobdoc CLOB );

INSERT INTO docs VALUES ( 1, 'Mary had a little lamb' ); INSERT INTO docs VALUES ( 2, 'Twinkle, twinkle little star' ); INSERT INTO docs VALUES ( 3, 'This Lamb is my lamb' );

CREATE INDEX docs_clobdoc_idx ON docs ( clobdoc ) INDEXTYPE IS ctxsys.context;

Проверка:

CTX> SELECT CONTAINS ( clobdoc, 'little' ) AS score FROM docs;

SCORE ---------- 4 4 0

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

Пусть на сервере имеется каталог c:\distr\ora102\docdisk с документацией по Oracle. Там есть простой текстовый файл readme.txt:

Создадим в БД указатель на каталог и переопределим таблицу DOCS:

CONNECT / AS SYSDBA

CREATE OR REPLACE DIRECTORY docs_dir AS 'c:\distr\ora102\docdisk'; GRANT READ ON DIRECTORY docs_dir TO ctx; CONNECT ctx/ctx TRUNCATE TABLE docs; DROP INDEX docs_clobdoc_idx; ALTER TABLE docs DROP COLUMN clobdoc; ALTER TABLE docs ADD ( bfiledoc BFILE );

INSERT INTO docs VALUES ( 1, BFILENAME ( 'DOCS_DIR', 'readme.txt' ) );

CREATE INDEX docs_bfiledoc_idx ON docs ( bfiledoc ) INDEXTYPE IS ctxsys.context;

Проверка:

CTX> SELECT CONTAINS ( bfiledoc, 'oracle support' ) AS score FROM docs;

SCORE ---------- 12

Обратите внимание, что в отличие от предыдущих примеров здесь документы хранятся в файловой системе, а в БД создается текстовый индекс; именно его и использует СУБД для вычисления результатов, несмотря на то, что формально запрос обращается к документам. Это может приводить к ошибкам при попытке извлечь сам документ ввиду его исчезновения уже после создания индекса - картина вполне привычная для тех, кто пользуется поисковыми машинами в интернете.

Как и раньше, изменения в документах не отразятся в индексе сами собой. Однако при хранении документов в БД система имела возможность фиксировать факт их изменения и предоставляла информацию о рассогласовании содержимого индекса и документов, чем можно было пользоваться, решая, стоит ли обновить индекс; в случае же внешнего хранения документов сведения о возможных рассогласованиях накапливаться в БД не могут.



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