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

1 ... 283 284 285 [ 286 ] 287 288 289 ... 469


interMedia 1271

3 <appointment type= personal >

4 <title>Team Meeting</title>

5 <start date>31-MAR-2 00K/start date>

6 <start time>1100</start time>

7 <notes>Review projects for QK/notes>

8 <attendees>

9 <attendee>Joel</attendee>

10 <attendee>Tom</attendee>

11 </attendees>

12 </appointment>)

13 /

1 row created. SQL> commit; Commit complete.

SQL> create index my xml idx on my xml docs(xmldoc)

2 indextype is ctxsys.context

3 parameters(section group ctxsys.auto section group)

Index created.

Таким образом, без всяких дополнительных действий со стороны разработчика приложения компонент interMedia Text автоматически создал разделы для всех тегов, содержащихся в индексируемых ХML-документах. Так что, если необходимо найти документы, содержащие слово projects в элементе note, достаточно выполнить следующий оператор:

SQL> select id

2 from my xml docs

3 where contains(ldoc, projects within notes) > 0

В процессе автоматического создания разделов созданы специальные разделы зон (zone section). В предыдущих примерах определения разделов создавались исключительно разделы полей (field section). В отличие от разделов полей, разделы зон могут перекрываться и быть вложенными. Поскольку при использовании группы разделов AUTO SECTION GROUP компонент interMedia Text создает разделы зон для всех непустых тегов, можно выполнять запросы вида:

SQL> select id

2 from my xml docs

3 where contains(ldoc, projects within appointment) > 0



1272 Глава 17

SQL> select id

2 from my xml docs

3 where contains(ldoc, Joel within attendees) > 0

Раздел, указанный в предыдущих запросах, не содержит искомых терминов явно: они вложены в структурные элементы этого раздела. Использование разделов зон и автоматического создания разделов позволяет управлять областью поиска в XML-документе, расширяя или сужая ее в соответствии с необходимостью.

Используя группы разделов, можно потребовать от компонента interMedia Text проиндексировать атрибуты тегов. При использовании группы разделов AUTO SECTION GROUP значения атрибутов разделов автоматически выбираются и индексируются.

Итак, если необходимо найти все персональные задания, другими словами, XML-документы, содержащие строку personal как значение атрибута type тега appointment, можно выполнить следующий запрос:

SQL> select id

2 from my xml docs

3 where contains(ldoc, personal within appointinentStype) >0

Как видите, задание и индексирование разделов - очень мощное средство компонента interMedia Text. Следует, однако, помнить, что группу AUTO SECTION GROUP можно использовать не всегда. Хотя и есть возможность потребовать от компонента interMedia Text при автоматическом создании разделов не индексировать определенные теги, в конечном итоге в разделы может быть выделено и проиндексировано слишком много элементов документа, что загрязняет индекс. Общий размер индекса чрезвычайно увеличивается, что может резко снизить производительность поиска. Автоматическое создание разделов - мощное средство, но его надо использовать осторожно.

Проблемы

При использовании компонента interMedia Text следует учитывать возможность возникновения ряда проблем. Не все они очевидны или возникают достаточно часто, поэтому я опишу наиболее типичные, с которыми мне приходилось сталкиваться.

Компонент interMedia Text - это НЕ система документооборота

Это не проблема, скорее следствие неверного представления о назначении компонента interMedia Text. Я слышал, как при упоминании компонента interMedia Text клиенты и сотрудники корпорации Oracle называли его системой документооборота (document



interMedia 1273

management solution). Без сомнения, interMedia Text не является системой документооборота.

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

Компонент interMedia Text , конечно, не является системой документооборота. Он может использоваться в полной системе документооборота и обеспечивать многие из необходимых функций. Корпорация Oracle тесно интегрировала средства interMedia Text в состав системы Oracle Internet File System, которую можно использовать для управления содержимым сайтов (content management), и которая обеспечивает базовые функции системы документооборота.

Синхронизация индекса

Часто необходимо создать систему на базе средств interMedia Text и выполнять в фоновом режиме процесс ctxsrv для периодической синхронизации индекса interMedia Text, причем синхронизация должна происходить в реальном времени. Одна из проблем, которые могут возникнуть при многократной и частой синхронизации индекса interMedia Text для большого набора документов, связана с его разрастанием и фрагментацией.

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

В качестве примера можно привести мой Web-сайт AskTom. На этом сайте пользователи Oracle задают технические вопросы о программных продуктах Oracle. Вопросы просматриваются, на них даются подробные (я надеюсь) ответы, и эти ответы публикуются. Опубликованные вопросы и ответы вставляются в таблицу, проиндексированную с помощью индекса interMedia Text. На Web-сайте AskTom есть страница поиска по этой таблице опубликованных вопросов и ответов.

Общее количество строк в этой системе сравнительно невелико (менее 10000 на момент написания этой главы). Изменения в системе практически никогда не происходят; после публикации вопросов и ответов они почти никогда не изменяются и не удаляются. Каждый день вставляется обычно не более 25 строк, и вставки эти выполняются в течение всего дня. Мы выполняем синхронизацию индекса с помощью процесса ctxsrv, работающего в фоновом режиме, что идеально подходит для данной системы, предназначенной прежде всего для поиска в условиях небольшого количества вставок и изменений.

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



1 ... 283 284 285 [ 286 ] 287 288 289 ... 469

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