Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle Text Contiene e contenuto tecnico

Per prima cosa devi definire il trattino come printjoin nel tuo lexer.

controlla con

select IXV_ATTRIBUTE, IXV_VALUE from CTXSYS.CTX_INDEX_VALUES where IXV_CLASS =  'LEXER';

IXV_ATTRIBUTE                  IXV_VALUE     
-----------------------------------------
PRINTJOINS                     _$%&-         
NUMJOIN                        .              
NUMGROUP                       .              
WHITESPACE                     ,= 

Quindi puoi (dopo aver ricreato l'indice con questo lexer) convalidare che i token siano come previsto:(la tua tabella varierebbe in base al nome dell'indice; controlla tutte le tabelle come 'DR$%$I')

select TOKEN_TEXT from DR$TEXTIDX_IDX$I where TOKEN_TEXT like '%-XYZ99';
TOKEN_TEXT                                                     
----------------------------------------------------------------
AN-XYZ99                                                         
BAR-XYZ99                                                        
FO-XYZ99

Ora puoi eseguire una query per la stringa di ricerca.

A quanto pare devi evitare il trattino come BAR-XYZ99 troverà le righe con BAR non contenente XYZ99; sebbene la documentazione di hyphen with no space è un po' diverso.

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

Per qualche motivo (sono su 11.2.0.2.0) l'escape con parentesi graffe non funziona (non restituisce alcuna corrispondenza), ma usare la barra rovesciata va bene.

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