Eerst moet u het koppelteken definiëren als een printjoin
in je lexer.
controleer het met
select IXV_ATTRIBUTE, IXV_VALUE from CTXSYS.CTX_INDEX_VALUES where IXV_CLASS = 'LEXER';
IXV_ATTRIBUTE IXV_VALUE
-----------------------------------------
PRINTJOINS _$%&-
NUMJOIN .
NUMGROUP .
WHITESPACE ,=
Vervolgens kunt u (na het opnieuw maken van de index met deze lexer) valideren dat de tokens zijn zoals verwacht:(uw tabel zou variëren op basis van de indexnaam; controleer alle tabellen zoals 'DR$%$I')
select TOKEN_TEXT from DR$TEXTIDX_IDX$I where TOKEN_TEXT like '%-XYZ99';
TOKEN_TEXT
----------------------------------------------------------------
AN-XYZ99
BAR-XYZ99
FO-XYZ99
Nu kunt u zoeken naar de zoekreeks.
Het is duidelijk dat u het koppelteken moet escapen als BAR-XYZ99
vindt rijen met BAR
niet met XYZ99
; hoewel de documentatie van hyphen with no space
is een beetje anders.
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
Om de een of andere reden (ik ben op 11.2.0.2.0) werkt het ontsnappen met accolades niet (retourneert geen overeenkomst), maar het gebruik van backslash is prima.
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