Vous devez d'abord définir le trait d'union comme un printjoin
dans votre lexer.
vérifier avec
select IXV_ATTRIBUTE, IXV_VALUE from CTXSYS.CTX_INDEX_VALUES where IXV_CLASS = 'LEXER';
IXV_ATTRIBUTE IXV_VALUE
-----------------------------------------
PRINTJOINS _$%&-
NUMJOIN .
NUMGROUP .
WHITESPACE ,=
Ensuite, vous pouvez (après avoir recréé l'index avec ce lexer) valider que les jetons sont comme prévu :(votre table variera en fonction du nom de l'index ; vérifiez toutes les tables comme 'DR$%$I')
select TOKEN_TEXT from DR$TEXTIDX_IDX$I where TOKEN_TEXT like '%-XYZ99';
TOKEN_TEXT
----------------------------------------------------------------
AN-XYZ99
BAR-XYZ99
FO-XYZ99
Vous pouvez maintenant interroger la chaîne de recherche.
Apparemment, vous devez échapper le trait d'union sous la forme BAR-XYZ99
trouvera les lignes avec BAR
pas contenant XYZ99
; bien que la documentation du hyphen with no space
est un peu différent.
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
Pour une raison quelconque (je suis sur 11.2.0.2.0), l'échappement avec des accolades ne fonctionne pas (ne renvoie aucune correspondance), mais l'utilisation d'une barre oblique inverse convient.
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