我想要能够在Oracle文本查询中转义搜索条件,使用包含并将转义的条件与通配符组合以具有“双截断”条件。 (我知道我的索引可能不设置为理想的性能,但这是多余的)。我想能够使用花括号语法的最佳可读性,但这不工作。根据这个相关(但不是重复)问题的顶部答案,花括号定义完整的标记。有没有办法禁用或解决此行为?
我宁愿避免不得不在我的搜索条件(根据我的代码中的最后一次选择)转义每个单个字符或尝试搜索字符串中的特殊字符,因为保留字也被认为是“特殊的”。 (注意我没有停止词)下面演示了我的问题。 (不幸的是SQLFiddle看起来不支持Oracle文本):
create table MY_TABLE(MY_COL varchar2(20));
insert into MY_TABLE(MY_COL) values ('abc');
insert into MY_TABLE(MY_COL) values ('abcd');
insert into MY_TABLE(MY_COL) values ('abcde');
insert into MY_TABLE(MY_COL) values ('bcd');
insert into MY_TABLE(MY_COL) values ('bcde');
create index FTIX on MY_TABLE (MY_COL)
indextype is CTXSYS.CONTEXT
PARAMETERS ('STOPLIST CTXSYS.EMPTY_STOPLIST SYNC (ON COMMIT)');
select * from MY_TABLE where CONTAINS(MY_COL, '%bcd%') > 0; --expected results
select * from MY_TABLE where CONTAINS(MY_COL, '%{bcd}%') > 0; --no results
select * from MY_TABLE where CONTAINS(MY_COL, '{bcd}') > 0; --returns bcd
select * from MY_TABLE where CONTAINS(MY_COL, '{%bcd%}') > 0; --returns bcd
select * from MY_TABLE where CONTAINS(MY_COL, '%\b\c\d%') > 0; --expected results