>Добрый день! >rco_filter работает на стадии индексации. Если настройки фильтрации не искажают обозначения секций, то котекстный поиск должен работать.
Какие настройки могут искажать обозначения секций? После фильтрации rco_filter информация о разметке html теряется?
Пример по которому проверял поиск по секциям:
в таблицу добавлен документ:
<html> <head> <title>title text</title> </head> <body> document text </body> </html>
настройка rco создана.
begin begin execute immediate 'drop index doc_texts_rco'; exception when others then null; end; begin ctx_ddl.drop_preference('my_filter'); exception when others then null; end; begin ctx_ddl.drop_section_group('my_section_group'); exception when others then null; end; end; /
PL/SQL procedure successfully completed.
begin ctx_ddl.create_preference('my_filter', 'NULL_FILTER'); ctx_ddl.create_section_group('my_section_group', 'HTML_SECTION_GROUP'); ctx_ddl.add_field_section('my_section_group', 'TITLE', 'title', TRUE); execute immediate 'create index doc_texts_rco on scott.doc_texts(value) indextype is ctxsys.context parameters(''section group my_section_group filter my_filter'')'; execute immediate 'alter index doc_texts_rco rebuild'; end; /
PL/SQL procedure successfully completed.
select count(*) from doc_texts where contains(value, 'title text within title') > 0;
COUNT(*) ---------- 1
begin begin execute immediate 'drop index doc_texts_rco'; exception when others then null; end; end; /
PL/SQL procedure successfully completed.
begin execute immediate 'create index doc_texts_rco on scott.doc_texts(value) indextype is ctxsys.context parameters(''section group my_section_group nopopulate filter rco_filter_1'')'; execute immediate 'alter index doc_texts_rco rebuild'; end; /
PL/SQL procedure successfully completed.
select count(*) from doc_texts where contains(value, 'title text within title') > 0;
COUNT(*) ---------- 0
Алексей Дмитровский
01.11.07, 14:45
re: re: re: Поиск по секциям документа
Добрый день!
Мой первый ответ был некорректным. Существующая версия rco_filter'а удаляет все тэги, т.е. секционирование невозможно.
Евгений
13.11.07, 12:57
re: re: re: re: Поиск по секциям документа
>Существующая версия rco_filter'а удаляет все тэги, т.е. секционирование невозможно.
На самом деле, если все секции заранее известны (например, при использовании MULTI_COLUMN_DATASTORE), то выход есть. Можно использовать USER_DATASTORE, и в процедуре, которая возвращает текст для индексирования, формировать текст для каждой секции, преобразуя его в нормальную форму (rco_context.get_normal_form), и оборачивая его затем в нужный тег. В принципе, меня такой вариант почти устраивает. Хотелось бы еще иметь возможность приводить к нормальной форме не только varchar2 (с его ограничением на размер), но и CLOB.
>Добрый день! > >Мой первый ответ был некорректным. >Существующая версия rco_filter'а удаляет все тэги, т.е. секционирование невозможно. > Добрый день! Какая версия имелась ввиду? 4.1.0? С уважением, Ольга
Алексей Дмитровский
23.04.08, 11:38
re: re: re: re: re: Поиск по секциям документа
Да, именно 4.1.0.
Алексей Дмитровский
23.04.08, 18:35
re: re: re: re: re: re: Поиск по секциям документа
Уточнение. При настройке параметра морфологии "Leave intermediate symbols" = Y теги и их содержимое сохраняются.