Zuerst müssen Sie hyphen als printjoin
definieren in Ihrem Lexer.
überprüfen Sie es mit
select IXV_ATTRIBUTE, IXV_VALUE from CTXSYS.CTX_INDEX_VALUES where IXV_CLASS = 'LEXER';
IXV_ATTRIBUTE IXV_VALUE
-----------------------------------------
PRINTJOINS _$%&-
NUMJOIN .
NUMGROUP .
WHITESPACE ,=
Dann können Sie (nachdem Sie den Index mit diesem Lexer neu erstellt haben) überprüfen, ob die Token wie erwartet sind:(Ihre Tabelle würde basierend auf dem Indexnamen variieren; überprüfen Sie alle Tabellen wie 'DR$%$I')
select TOKEN_TEXT from DR$TEXTIDX_IDX$I where TOKEN_TEXT like '%-XYZ99';
TOKEN_TEXT
----------------------------------------------------------------
AN-XYZ99
BAR-XYZ99
FO-XYZ99
Jetzt können Sie nach dem Suchstring fragen.
Anscheinend müssen Sie den Bindestrich als BAR-XYZ99
maskieren findet Zeilen mit BAR
nicht mit XYZ99
; obwohl die Dokumentation von hyphen with no space
ist etwas 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
Aus irgendeinem Grund (ich bin auf 11.2.0.2.0) funktioniert das Escape mit geschweiften Klammern nicht (gibt keine Übereinstimmung zurück), aber die Verwendung von Backslash ist in Ordnung.
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