Първо трябва да дефинирате тирето като printjoin
във вашия лексер.
проверете го с
select IXV_ATTRIBUTE, IXV_VALUE from CTXSYS.CTX_INDEX_VALUES where IXV_CLASS = 'LEXER';
IXV_ATTRIBUTE IXV_VALUE
-----------------------------------------
PRINTJOINS _$%&-
NUMJOIN .
NUMGROUP .
WHITESPACE ,=
След това можете (след повторно създаване на индекс с този лексер) да потвърдите, че токените са според очакванията:(вашата таблица ще варира в зависимост от името на индекса; проверете всички таблици като „DR$%$I“)
select TOKEN_TEXT from DR$TEXTIDX_IDX$I where TOKEN_TEXT like '%-XYZ99';
TOKEN_TEXT
----------------------------------------------------------------
AN-XYZ99
BAR-XYZ99
FO-XYZ99
Сега можете да направите заявка за низа за търсене.
Очевидно трябва да избегнете тирето като BAR-XYZ99
ще намери редове с BAR
не съдържащ XYZ99
; въпреки че документация на hyphen with no space
е малко по-различно.
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
По някаква причина (аз съм на 11.2.0.2.0) екранирането с къдрави скоби не работи (връща без съвпадение), но използването на обратна наклонена черта е добре.
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