Först måste du definiera bindestreck som en printjoin
i din lexer.
kontrollera det med
select IXV_ATTRIBUTE, IXV_VALUE from CTXSYS.CTX_INDEX_VALUES where IXV_CLASS = 'LEXER';
IXV_ATTRIBUTE IXV_VALUE
-----------------------------------------
PRINTJOINS _$%&-
NUMJOIN .
NUMGROUP .
WHITESPACE ,=
Sedan kan du (efter att ha återskapat index med denna lexer) validera att tokens är som förväntat:(din tabell skulle variera baserat på indexnamnet; kontrollera alla 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 fråga efter söksträngen.
Tydligen måste du undkomma bindestrecket som BAR-XYZ99
hittar rader med BAR
inte som innehåller XYZ99
; även om dokumentationen av hyphen with no space
är lite annorlunda.
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
Av någon anledning (jag är på 11.2.0.2.0) fungerar inte flykten med lockiga hängslen (returerar ingen matchning), men det går bra att använda omvänt snedstreck.
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