Найти количество документов, проиндексированных в моем индексе oracle.context?
Я знаю, что могу использовать ctx_query.count_hits
для подсчета количества документов, соответствующих запросу, и аналогичным образом я могу использовать
count(*) where CONTAINS(...)
Но это только варианты, если у меня есть запрос. Эти функции выдают исключение, если я передаю пустую строку в качестве запроса (спасибо oracle...). Так,
Есть ли способ подсчитать общее количество документов, проиндексированных моим индексом oracle.text?
2 ответа
Решение
Предпочтительным способом является использование пакета CTX_REPORT, либо описать_индексом
set long 50000
select ctx_report.describe_index('MYINDEX') from dual;
даст вам количество проиндексированных документов в docid count
колонка:
=========================================================================== INDEX DESCRIPTION =========================================================================== index name: "SCHEMA"."MYINDEX" index id: 1130 index type: context status: INDEXED full optimize token: full optimize count: docid count: 6909265 nextid: 6909266
В качестве альтернативы используйте index_stats:
create table output (result CLOB);
declare
x clob := null;
begin
ctx_report.index_stats('MYINDEX',x);
insert into output values (x);
commit;
dbms_lob.freetemporary(x);
end;
/
set long 32000
set head off
set pagesize 10000
select * from output;
=========================================================================== STATISTICS FOR "SCHEMA"."MYINDEX" =========================================================================== indexed documents: 6,909,265
Также полезно получить размер индекса:
set long 50000
select ctx_report.index_size('MYINDEX') from dual;
Вы можете использовать CTX... просмотров:
select idx_name, idx_table_owner, idx_table, idx_docid_count
from ctx_user_indexes