如何为'%abc%'搜索创建文本索引?

Cli*_*ton 6 sql oracle indexing full-text-search

我想索引像这样的查询 x like '%abc%'

如果我有一个如下表

create table t
(
  data varchar(100)
);
Run Code Online (Sandbox Code Playgroud)

我想创建一个索引,以便能够有效地执行以下操作:

select * from t where contains('%abc%');
Run Code Online (Sandbox Code Playgroud)

还有这个:

select * from t where contains('abc%');
Run Code Online (Sandbox Code Playgroud)

我也希望这个表能够实时更新.

我如何创建这样的索引?(我有一种感觉,我需要一个ctxcat索引,但我很困惑我需要给它什么选项)

我正在使用Oracle 10g.

Kev*_*ton 7

我会用这个(设置你的最小和最大长度来适应值)

BEGIN
    ctx_ddl.create_preference  ('FT_WL', 'BASIC_WORDLIST');
    ctx_ddl.set_attribute      ('FT_WL', 'substring_index',   'YES');
    ctx_ddl.set_attribute      ('FT_WL', 'prefix_index',      'YES');
    ctx_ddl.set_attribute      ('FT_WL', 'prefix_min_length', 1);
    ctx_ddl.set_attribute      ('FT_WL', 'prefix_max_length', 6);
  END;

CREATE INDEX fulltext_idx ON tmp_fulltext (fulltext)
 INDEXTYPE IS CTXSYS.CTXCAT
 PARAMETERS ('WORDLIST FT_WL')
Run Code Online (Sandbox Code Playgroud)

这些参数在此处解释Oracle Text Reference

并查看有关如何管理刷新以及索引如何比具有高基数数据的完整扫描更快的问题:

LIKE'%...%'通配符查询的PL/SQL性能调优