11g R2上Oracle文本名称搜索功能的优化

11g R2上Oracle文本名称搜索功能的优化,oracle,oracle11g,oracle-text,Oracle,Oracle11g,Oracle Text,我正试图找出如何在11g R2上使用Oracle文本名称搜索功能获得合理的性能 为了进行测试,我创建了一个带有objectid和fullname的表,该表由一个约5400000行的现有表填充: create table personname as select p.objectid, p.fname||chr(32)||p.mname||chr(32)||p.lname as fullname from person p; 然后,我按照如下方式设置数据存储和节组的首选项: begin be

我正试图找出如何在11g R2上使用Oracle文本名称搜索功能获得合理的性能

为了进行测试,我创建了一个带有objectid和fullname的表,该表由一个约5400000行的现有表填充:

create table personname as
select p.objectid, p.fname||chr(32)||p.mname||chr(32)||p.lname as fullname
from person p;
然后,我按照如下方式设置数据存储和节组的首选项:

begin
  begin
    ctx_ddl.create_preference('namesearch_ds', 'multi_column_datastore');
    ctx_ddl.set_attribute('namesearch_ds', 'columns', 'fullname');
  end;

  begin
    ctx_ddl.create_section_group('namesearch_sg', 'basic_section_group');
    ctx_ddl.add_ndata_section('namesearch_sg', 'fullname', 'fullname');
  end;
end;
最后创建上下文索引:

create index personname_idx
on personname(fullname)
indextype is ctxsys.context
parameters
('datastore namesearch_ds section group namesearch_sg sync(on commit)');
到目前为止,一切都很好。 然而,查询速度相当慢。执行如下选择操作:

select score(1), pn.* 
from personname pn
where contains(pn.fullname, 'ndata(fullname, Bjørn Egil Hansen)', 1) > 0
  and rownum <= 50
order by score(1) desc;
选择分数(1),请注意。*
来自人名pn
其中包含(pn.fullname,'ndata(fullname,Bjørn Egil Hansen)’,1)>0
和罗纳姆