在oracle中为逗号分隔值创建catsearch索引

时间:2018-12-13 14:11:22

标签: oracle

我在oracle表中有几列包含“错误代码”

ID   DESC   ERROR_CODE
=========================
01   ITM1   01,03,06
02   ITM2   04,05,16
03   ITM3   00,15

目前,有许多查询使用LIKE %05%

是否可以在oracle中构造一个索引来解析逗号之间的所有“单词”,然后使用CATSEARCH进行搜索,以便可以对值进行索引?

通常会从结果中过滤出多个错误代码。

WHERE ERROR_CODE NOT LIKE '%05%'
AND ERROR_CODE NOT LIKE '%15%'
AND ERROR_CODE NOT LIKE '%10%'

我想提高这些过滤查询的性能。
该系统是旧系统,我无法重新设计数据,至少目前还不能。

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用所需参数创建和调整自己的词法分析器? (documentation)也许这样的方法可以解决您的问题:(未经测试)

begin 
  ctx_ddl.create_preference('comma_lexer', 'BASIC_LEXER');
  ctx_ddl.set_attribute('comma_lexer', 'WHITESPACE', ',');
  ctx_ddl.set_attribute('comma_lexer', 'NUMGROUP', '#'); 
end; 
/

create index node_sequence_index 
  on error_table(error_code) 
  indextype is ctxsys.ctxcat 
  parameters ('lexer comma_lexer')
;

任意#替换了NUMGROUP的默认,,因此它不会计算错误序列,例如150,020,030作为一个数字。

索引类型为ctxsys.ctxcat,以优化CATSEARCH的索引。