まず、ハイフンを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