Oracle-Text mit geschweiften Klammern und Platzhaltern

Ich möchte in der Lage sein, die Suchkriterien in einer Oracle-Textabfrage mit @ zu umgehecontains und kombinieren Sie die maskierten Kriterien mit Platzhaltern, um "doppelt abgeschnittene" Kriterien zu erhalten. (Ich weiß, dass meine Indizes möglicherweise nicht für eine optimale Leistung eingerichtet sind, aber das ist überflüssig). Ich möchte in der Lage sein, die Syntax für geschweifte Klammern für beste Lesbarkeit zu verwenden, aber das funktioniert nicht. Laut der oberen Antwort auf diese verwandte (aber nicht doppelte) Frage definieren geschweifte Klammern vollständige Token. Gibt es eine Möglichkeit, dieses Verhalten zu deaktivieren oder zu umgehen?

Oracle Text: So bereinigen Sie Benutzereingaben

Ich möchte lieber vermeiden, jedes einzelne Zeichen in meinen Suchkriterien zu maskieren (gemäß der letzten Auswahl in meinem Code) oder die Zeichenfolge nach Sonderzeichen zu durchsuchen, da reservierte Wörter auch als "Sonderzeichen" gelten. (Beachten Sie, dass ich keine Stoppwörter habe.) Das Folgende zeigt mein Problem. (Leider scheint SQLFiddle Oracle-Text nicht zu unterstützen):

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage