Мы хотим использовать a ctxsys.context
индексируйте тип для полнотекстового поиска. Но я был вполне удивлен, что индекс этого типа автоматически не обновляется. У нас есть 3 миллиона документов с приблизительно 10k, обновляет/вставляет/удаляет в день.
Каковы Ваши рекомендации для синхронизации и оптимизации текстового индекса Oracle?
Я думаю, что опция «СИНХРОНИЗАЦИЯ КАЖДОГО», как описано в предыдущем ответе, доступна только в 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_ * с аналогичной функцией.
Что вы имеете в виду под "не обновляется автоматически"?
Индекс может синхронизироваться при фиксации или периодически.
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 минуты. Если вы можете позволить себе сделать это в одночасье, то даже лучше. Что лучше, зависит от вашей загрузки и размера документа.
Эти ссылки, вероятно, могут предоставить вам дополнительную информацию:
Для совета администратора, может быть, сбой сервера лучше?