Først skal du definere bindestreg som en printjoin
i din lexer.
tjek det med
select IXV_ATTRIBUTE, IXV_VALUE from CTXSYS.CTX_INDEX_VALUES where IXV_CLASS = 'LEXER';
IXV_ATTRIBUTE IXV_VALUE
-----------------------------------------
PRINTJOINS _$%&-
NUMJOIN .
NUMGROUP .
WHITESPACE ,=
Så kan du (efter at have genskabt indeks med denne lexer) validere, at tokens er som forventet:(din tabel vil variere baseret på indeksnavnet; tjek alle tabeller som 'DR$%$I')
select TOKEN_TEXT from DR$TEXTIDX_IDX$I where TOKEN_TEXT like '%-XYZ99';
TOKEN_TEXT
----------------------------------------------------------------
AN-XYZ99
BAR-XYZ99
FO-XYZ99
Nu kan du forespørge efter søgestrengen.
Tilsyneladende skal du undslippe bindestregen som BAR-XYZ99
vil finde rækker med BAR
ikke indeholdende XYZ99
; selvom dokumentationen af hyphen with no space
er lidt anderledes.
SELECT SCORE(1),txt
FROM textidx
WHERE CONTAINS(txt, 'BAR-XYZ99',1) > 0;
SCORE(1) TXT
---------- ------------------------------------------------------------------------------------
4 unbekannt Stadt Text: FO-XYZ99 << foobar Straße 31.12.2017 Datum Host 20160101 bar
Af en eller anden grund (jeg er på 11.2.0.2.0) virker det at undslippe med krøllede seler ikke (returnerer ingen match), men det er fint at bruge omvendt skråstreg.
SELECT SCORE(1),txt
FROM textidx
WHERE CONTAINS(txt, 'BAR\-XYZ99',1) > 0;
SCORE(1) TXT
---------- ------------------------------------------------------------------------------------
4 unbekannt Stadt Text: BAR-XYZ99 << foobar Straße 31.12.2017 Datum Host 20160101 bla