|
Программирование >> Oracle
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 пакетами максимально большого размера, при котором еще не требуется откачка страниц памяти на диск. Выстроив запросы индексирова-
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |