Trước tiên, bạn phải xác định dấu gạch nối là printjoin
trong lexer của bạn.
kiểm tra nó với
select IXV_ATTRIBUTE, IXV_VALUE from CTXSYS.CTX_INDEX_VALUES where IXV_CLASS = 'LEXER';
IXV_ATTRIBUTE IXV_VALUE
-----------------------------------------
PRINTJOINS _$%&-
NUMJOIN .
NUMGROUP .
WHITESPACE ,=
Sau đó, bạn có thể (sau khi tạo lại chỉ mục bằng lexer này) xác thực rằng các mã thông báo là như mong đợi:(bảng của bạn sẽ thay đổi dựa trên tên chỉ mục; kiểm tra tất cả các bảng như 'DR $% $ I')
select TOKEN_TEXT from DR$TEXTIDX_IDX$I where TOKEN_TEXT like '%-XYZ99';
TOKEN_TEXT
----------------------------------------------------------------
AN-XYZ99
BAR-XYZ99
FO-XYZ99
Bây giờ bạn có thể truy vấn chuỗi tìm kiếm.
Rõ ràng bạn phải thoát khỏi dấu gạch nối là BAR-XYZ99
sẽ tìm thấy các hàng có BAR
không chứa XYZ99
; mặc dù tài liệu về hyphen with no space
hơi khác một chút.
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
Vì một số lý do (tôi đang sử dụng 11.2.0.2.0) việc thoát với dấu ngoặc nhọn không hoạt động (trả về không khớp), nhưng sử dụng dấu gạch chéo ngược là tốt.
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