Primeiro você deve definir o hífen como um
printjoin
em seu lexer. verifique com
select IXV_ATTRIBUTE, IXV_VALUE from CTXSYS.CTX_INDEX_VALUES where IXV_CLASS = 'LEXER';
IXV_ATTRIBUTE IXV_VALUE
-----------------------------------------
PRINTJOINS _$%&-
NUMJOIN .
NUMGROUP .
WHITESPACE ,=
Então você pode (depois de recriar o índice com este lexer) validar se os tokens estão conforme o esperado:(sua tabela varia com base no nome do índice; verifique todas as tabelas como 'DR$%$I')
select TOKEN_TEXT from DR$TEXTIDX_IDX$I where TOKEN_TEXT like '%-XYZ99';
TOKEN_TEXT
----------------------------------------------------------------
AN-XYZ99
BAR-XYZ99
FO-XYZ99
Agora você pode consultar a string de pesquisa.
Aparentemente, você deve escapar do hífen como
BAR-XYZ99
encontrará linhas com BAR
não contendo XYZ99
; embora a documentação do hyphen with no space
é um pouco diferente. 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
Por algum motivo (estou em 11.2.0.2.0) o escape com chaves não funciona (não retorna nenhuma correspondência), mas usar barra invertida é bom.
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