|
Программирование >> Oracle
1274 Глава 17 ния в очередь и выполняя их большими пакетами, можно получить в результате более компактный индекс. Независимо от выбранного метода синхронизации следует периодически оптимизировать индексы interMedia Text с помощью оператора ALTER INDEX REBUILD. Процесс оптимизации позволит получить не только более компактный индекс, но и очистит его от информации, оставшейся после прежних логических удалений. Индексирование информации вне базы данн1х Компонент interMedia Text не требует помещать текстовые данные в базу данных. С его помощью можно индексировать данные, содержащиеся в документах в файловой системе сервера или даже доступных извне по адресу URL. Когда данные находятся в базе данных Oracle, все изменения в них автоматически обрабатываются компонентом interMedia Text. Когда же источник данных находится вне базы данных, синхронизацию индекса с изменившимися внешними данными должен обеспечить разработчик приложения. Изменить отдельную строку проще всего, изменив один из столбцов, по которому создан индекс interMedia Text. Например, если бы я использовал следующую таблицу и индекс для поддержки списка проиндексированных адресов URL: SQL> create table my urls 2 (id number primary key, 3 theurl varchar2(4000) Table created. SQL> create index my url idx on my urls(theurl) 2 indextype is ctxsys.context 3 parameters(datastore ctxsys.url datastore) Index created. Я мог бы обновить индекс для конкретной строки, выполнив: SQL> update my urls 2 set theurl = theurl 3 where id = 1 0 rows updated. Службы обработки документов Под службами обработки документов я подразумеваю набор средств компонента interMedia Text для преобразования документа в текстовый вид или формат HTML, с возможным выделением слов, найденных в документе в результате поиска. Многие ошибочно считают, что компонент interMedia Text сохраняет всю необходимую информацию для полного воссоздания документа. Это ошибочное представление приводит к выводу, что после индексирования исходный текст документа можно уда- interMedia 1275 лить. Это верно, если придется только выполнять запросы к проиндексированной информации, но не верно, если предполагается поддержка тех или иных служб обработки документов. Например, если создать индекс interMedia Text с помощью URL DATASTORE и попгтаться сгенерировать HTML-представление найденной строки с помощью процедуры CTX DOC.FILTER, ее вызов завершится сообщением об ошибке, если документ с соответствующим адресом URL недоступен. Компоненту interMedia Text для выполнения этого действия необходим доступ к исходному документу. Это относится также к файлам, хранящимся в файловой системе вне базы данных и проиндексированным как источник данных FILE DATASTORE. Индекс-каталог Во многих ситуациях индекс interMedia Text предоставляет намного больше возможностей, чем требуется приложению. Использование индекса interMedia Text, кроме того, требует выполнения определенных действий по сопровождению, обеспечивающих его оптимизацию, синхронизацию и т.д. Для поддержки приложений, которым не нужны все функциональные возможности индекса interMedia Text, в версии компонента interMedia Text в СУБД Oracle 8.1.7 появился новый тип индекса - индекс-каталог, или, сокращенно, ctxcat. Об1чно большая часть текстовых данных не хранится в базе данных в виде большого набора документов. Во многих приложениях баз данных текст обычно неформатиро-ван, состоит из небольших фрагментов и не разбит на логические разделы, а размер текстовых фрагментов настолько мал, что их качественный лингвистический анализ невозможен. Кроме того, такого рода приложения баз данных часто запрашивают текстовые данные по условиям на другие столбцы., Рассмотрим, например, базу данных, в которой регистрируются поступившие сообщения о проблемах и предлагаемые способы решения этих проблем. В соответствующей таблице может использоваться, скажем, 80-символьное поле произвольного текста - тема (суть проблемы) и большое текстовое поле с описанием проблемы и способов ее решения. Кроме того, в таблице могут быть и другие столбцы со структурированной информацией, например датой поступления сообщения о проблеме, кодом аналитика, который над ней работает, кодом программного продукта, с которым связана проблема, и т.п. Мы имеем сочетание текста (по определению не являющегося документом) и структурированных данных. К этой таблице будут часто выполняться запросы типа найти все проблемы, связанные с СУБД (программный продукт) версии 8.1.6 (еще один атрибут), где упоминается ошибка ORA-01555 в поле темы (текстовый поиск) . Именно для таких приложений и был создан индекс-каталог. Как и можно было ожидать от урезанной версии полного индекса, индекс ctxcat имеет ряд ограничений. Поддерживаемые этим индексом операторы запросов являются подмножеством операторов полного индекса interMedia Text. Данные, которые индексируются с помощью индекса ctxcat, должны содержаться в базе данных Oracle в текстовом виде. Более того, индекс ctxcat не допускает использование нескольких языков в одном индексе. Однако даже с учетом этих ограничений индекс-каталог обеспечивает отличную производительность для многих приложений. 1276 Глава 17 Одна из приятных особенностей индекса-каталога - его не надо поддерживать. Операторы ЯМД применяются к этому индексу в рамках транзакции. Поэтому не нужно периодически синхронизировать индекс или запускать процесс ctxsrv для синхронизации в фоновом режиме. Еще одна серьезная причина использовать индекс-каталог связанна с присущей ему поддержкой структурированных запросов. Разработчик приложений может создавать наборы индексирования (index sets), которые позволяют с помощью индекса-каталога эффективно поддерживать как текстовый поиск, так и запросы к другим структурированным данным. Набор индексирования позволяет компоненту interMedia сохранять в индексе структурированную реляционную информацию вместе с индексируемым текстом. Это позволяет компоненту interMedia одновременно использовать поиск текста и поиск структурированной информации для нахождения документов, удовлетворяющих специфическим критериям. Рассмотрим небольшой пример: SQL> create table mynews 2 (id number primary key, 3 date created date, 4 news text varchar2(4000)) 5 / Table created. SQL> insert into mynews 2 values(1, 01-JAN-1990, Oracle is doing well) 1 row created. SQL> insert into mynews 2 values(2, 01-JAN-2001, I am looking forward to 9i) 1 row created. SQL> commit; Commit complete. SQL> begin 2 ctx ddl.create index set(news index set); 3 ctx ddl.add index(news index set, date created); 4 end; SQL> create index news idx on mynews(news text) 2 indextype is ctxsys.ctxcat 3 parameters(index set news index set) Index created. Обратите внимание, что для создания индекса-каталога указан тип индекса CTXSYS.CTXCAT. Кроме того, я создал набор индексирования NEWS INDEX SET и добавил в него столбец DATE CREATED. Это позволит компоненту interMedia Text эффективно обрабатывать запросы, содержащие условия для обоих столбцов: NEWS TEXT и DATE CREATED.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.091
При копировании материалов приветствуются ссылки. |