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



             

Текстовый индекс - часть 2


  • индекс DR$DOCS_VC2DOC_IDX$X (обычный, типа NORMAL),
  • сегменты типа LOBSEGMENT и LOBINDEX для хранения данных поля TOKEN_INFO типа BLOB.
  • Таблица DR$DOCS_VC2DOC_IDX$K.
    Хранит соответствие DOCID адресу ROWID строки с текстом или ссылкой на текст. Индексно-организованная таблица, хранится в структуре индекса.
  • Таблица DR$DOCS_VC2DOC_IDX$R.
    Хранит список для обратного поиска: ROWID по DOCID. Вторичные, связанные с ней объекты:
    • сегменты типа LOBSEGMENT и LOBINDEX для хранения данных поля DATA типа BLOB.
    • Таблица DR$DOCS_VC2DOC_IDX$N.
      Хранит список удаленных документов (DOCID) пополняющийся при оптимизации текстового индекса. Индексно-организованная таблица, хранится в структуре индекса.
    • Пример выдачи из таблицы DR$DOCS_VC2DOC_IDX$I:

      CTX> SELECT token_text, token_count FROM dr$docs_vc2doc_idx$i;

      TOKEN_TEXT TOKEN_COUNT ------------------------------------------------- ----------- LAMB 2 LITTLE 2 MARY 1 STAR 1 TWINKLE 1

      Еще одно отличие текстового индекса от обычного в том, что он не правится автоматически при правке документа. Например:

      CTX> UPDATE docs SET vc2doc = 'This Land is my land' WHERE doc_id = 3;

      1 row updated.

      CTX> COMMIT;

      Commit complete.

      CTX> SELECT token_text, token_count FROM dr$docs_vc2doc_idx$i;

      TOKEN_TEXT TOKEN_COUNT ------------------------------------------------- ----------- LAMB 2 LITTLE 2 MARY 1 STAR 1 TWINKLE 1

      В силу громоздкости текстового индекса сведения о необходимых исправлениях собираются в отдельной таблице, а сама правка выполняется по мере надобности вручную:

      CTX> SELECT pnd_index_name, pnd_rowid FROM ctx_user_pending;

      PND_INDEX_NAME PND_ROWID ---------------------------- ------------------ DOCS_VC2DOC_IDX AAAMm2AAEAAAABAAAC

      CTX> EXECUTE CTX_DDL.SYNC_INDEX ( 'docs_vc2doc_idx' )

      PL/SQL procedure successfully completed.

      CTX> /

      no rows selected

      CTX> SELECT token_text, token_count FROM dr$docs_vc2doc_idx$i;

      TOKEN_TEXT TOKEN_COUNT ------------------------------------------------- ----------- LAMB 2 LAND 1

      LITTLE 2 MARY 1 STAR 1 TWINKLE 1

      (Синхронизировать индекс можно и командой ALTER INDEX, но сейчас фирма Oracle этого не советует).

      Стандартный прием - создать задание для плановой корректировки текстового индекса по расписанию.




      Содержание  Назад  Вперед