Arhn - архитектура программирования

Как синхронизировать и оптимизировать индекс Oracle Text?

Мы хотим использовать тип индекса ctxsys.context для полнотекстового поиска. Но меня очень удивило, что индекс такого типа не обновляется автоматически. У нас есть 3 миллиона документов с примерно 10 тысячами обновлений/вставок/удалений в день.

Каковы ваши рекомендации по синхронизации и оптимизации индекса Oracle Text?


  • какие у вас есть признаки того, что индекс не синхронизирован? 16.12.2009
  • Довольно часто такие инструменты не делают предположений о ваших конкретных требованиях. Создание и поддержка индексов для больших объемов неструктурированных данных обычно требует некоторого внимания, чтобы выбранный вами дизайн привел к решению с приемлемыми компромиссами. Стратегии обновления и сопровождения для поисковой системы, скорее всего, будут сильно отличаться от решений для совместной разработки, которые работают в дополнение к поддержке аналитики. Oracle предоставляет вам небольшой набор вариантов синхронизации на выбор, и, имея всего 10 000 DML в день, вы, скорее всего, сможете обойтись без любого из них. 05.09.2016

Ответы:


1

Я думаю, что опция «СИНХРОНИЗИРОВАТЬ КАЖДЫЙ», как описано в предыдущем ответе, доступна только в Oracle 10g или новее. Если вы используете более старую версию Oracle, вам придется периодически запускать операцию синхронизации. Например, вы можете создать следующую хранимую процедуру:

CREATE OR REPLACE 
Procedure sync_ctx_indexes
IS
 CURSOR sql1 is select distinct(pnd_index_owner||'.'||pnd_index_name) as index_name from ctx_pending;
BEGIN
 FOR rec1 IN sql1 LOOP
 ctx_ddl.sync_index(rec1.index_name);
 END LOOP;
END;

а затем запланировать его запуск через DBMS_JOB:

DBMS_JOB.SUBMIT(job_id, 'sync_ctx_indexes;', SYSDATE, 'SYSDATE + 1/720');

Что касается оптимизации индекса, можно использовать следующую команду (также можно запланировать с помощью DBMS_JOB или через cron):

alter index my_index rebuild online parameters('optimize full maxtime 60');

Доступен также пакет CTX_* с аналогичной функцией.

16.12.2009
  • для версии 11g и выше Oracle не рекомендует перестраивать текстовые индексы с помощью alter index, а вместо этого использовать ctxsys.ctx_ddl.optimize_index. 05.09.2016

  • 2

    Что вы подразумеваете под "не обновляется автоматически"?

    Индекс можно синхронизировать при фиксации или периодически.

    Create index ... on ... INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('SYNC ( ON COMMIT)')
    Create index ... on ... INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS 'SYNC (EVERY "SYSDATE+1/24")')
    

    Если вам не нужна точность поиска в реальном времени, наш администратор баз данных рекомендовал периодически синхронизировать индекс, скажем, каждые 2 минуты. Если вы можете позволить себе сделать это на ночь, то даже лучше. Что лучше, зависит от вашей загрузки и размера документа.

    Эти ссылки, вероятно, могут предоставить вам дополнительную информацию:

    По совету администратора базы данных, может быть, сбой сервера лучше?

    16.12.2009
  • При фиксации, похоже, не рекомендуется. Можно ли также указать периодическую оптимизацию индекса при создании индекса? 17.12.2009
  • Просто имейте в виду: если вы используете SYNC ( ON COMMIT ) с MULTI_COLUMN_DATASTORE, синхронизация индекса будет запускаться только тогда, когда затронут столбец, содержащий фактический индекс. Например, если у вас есть многостолбцовый индекс по столбцам A, B и C с индексом, находящимся в A, то ОБНОВЛЕНИЕ столбца B НЕ вызовет синхронизацию индекса. 11.01.2013

  • 3

    Поместите это здесь как обновление для пользователей Oracle 12C. Если вы используете индекс в режиме реального времени, то он сохраняет элементы в памяти и периодически отправляет их в основные таблицы, что снижает фрагментацию и позволяет выполнять поиск NRT по потоковому контенту. Вот как это настроить

    exec ctx_ddl.drop_preference ( 'your_tablespace' );
    exec ctx_ddl.create_preference( 'your_tablespace', 'BASIC_STORAGE' );
    exec ctx_ddl.set_attribute ( 'your_tablespace', 'STAGE_ITAB', 'true' );
    create index  some_text_idx on your_table(text_col)  indextype is ctxsys.context PARAMETERS ('storage your_tablespace sync (on commit)')
    

    это установит индекс в режиме NRT. Это довольно мило.

    05.12.2016
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..