Per prima cosa devi definire il trattino come printjoin
nel tuo lexer.
controlla con
select IXV_ATTRIBUTE, IXV_VALUE from CTXSYS.CTX_INDEX_VALUES where IXV_CLASS = 'LEXER';
IXV_ATTRIBUTE IXV_VALUE
-----------------------------------------
PRINTJOINS _$%&-
NUMJOIN .
NUMGROUP .
WHITESPACE ,=
Quindi puoi (dopo aver ricreato l'indice con questo lexer) convalidare che i token siano come previsto:(la tua tabella varierebbe in base al nome dell'indice; controlla tutte le tabelle come 'DR$%$I')
select TOKEN_TEXT from DR$TEXTIDX_IDX$I where TOKEN_TEXT like '%-XYZ99';
TOKEN_TEXT
----------------------------------------------------------------
AN-XYZ99
BAR-XYZ99
FO-XYZ99
Ora puoi eseguire una query per la stringa di ricerca.
A quanto pare devi evitare il trattino come BAR-XYZ99
troverà le righe con BAR
non contenente XYZ99
; sebbene la documentazione di hyphen with no space
è un po' diverso.
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
Per qualche motivo (sono su 11.2.0.2.0) l'escape con parentesi graffe non funziona (non restituisce alcuna corrispondenza), ma usare la barra rovesciata va bene.
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