Setting Wildcard Expansion Limit
Use the wildcard_maxterms attribute to set the maximum allowed terms in a wildcard expansion.
--- create a sample table
drop table quick ;
create table quick
(
quick_id number primary key,
text varchar(80)
);
--- insert a row with 10 expansions for 'tire%'
insert into quick ( quick_id, text )
values ( 1, 'tire tirea tireb tirec tired tiree tiref tireg tireh tirei tirej');
commit;
--- create an index using wildcard_maxterms=100
begin
Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST');
ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 100) ;
end;
/
create index wildcard_idx on quick(text)
indextype is ctxsys.context
parameters ('Wordlist wildcard_pref') ;
--- query on 'tire%' - should work fine
select quick_id from quick
where contains ( text, 'tire%' ) > 0;
--- now re-create the index with wildcard_maxterms=5
drop index wildcard_idx ;
begin
Ctx_Ddl.Drop_Preference('wildcard_pref');
Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST');
ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 5) ;
end;
/
create index wildcard_idx on quick(text)
indextype is ctxsys.context
parameters ('Wordlist wildcard_pref') ;
--- query on 'tire%' gives "wildcard query expansion resulted in too many terms"
select quick_id from quick
where contains ( text, 'tire%' ) > 0;