So, ich hab jetzt eine praktikable Lösung gefunden. Statt des Context Index verwende ich jetzt einen CTXCAT Index. Für meine Zwecke absolut ausreichend:
Code:
begin
ctx_ddl.create_preference('CAT_WORDLIST', 'BASIC_WORDLIST');
ctx_ddl.set_attribute('CAT_WORDLIST','FUZZY_MATCH','GERMAN');
ctx_ddl.set_attribute('CAT_WORDLIST','PREFIX_INDEX','TRUE');
ctx_ddl.set_attribute('CAT_WORDLIST','PREFIX_MIN_LENGTH','3');
ctx_ddl.create_preference('CAT_LEXER','BASIC_LEXER');
ctx_ddl.set_attribute('CAT_LEXER','MIXED_CASE','NO');
ctx_ddl.set_attribute('CAT_LEXER','INDEX_STEMS','NONE');
ctx_ddl.set_attribute('CAT_LEXER','ALTERNATE_SPELLING','GERMAN');
end;
/
create index tbl0100person_name1ix on tbl0100person (name1) indextype is ctxsys.ctxcat parameters ('LEXER CAT_LEXER WORDLIST CAT_WORDLIST');
create index tbl0100person_name3ix on tbl0100person (name3) indextype is ctxsys.ctxcat parameters ('LEXER CAT_LEXER WORDLIST CAT_WORDLIST');
Die Suchen dauern jetzt auch bei "beliebten" Namen wie Meier und Huber unter 3 Sekunden, beim erneuten Ausführen unter einer Sekunde.
Code:
select persno,name1,name3 from tbl0100person where catsearch(name1,'mei*','')>90
oder
select persno,name1,name3 from tbl0100person where catsearch(name1,'mei*','')>90 and catsearch(name3,'manf*','')>90
Kein Problem mehr.
Lesezeichen