Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle Text Contient et contenu technique

Vous devez d'abord définir le trait d'union comme un printjoin dans votre lexer.

vérifier avec

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

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

Ensuite, vous pouvez (après avoir recréé l'index avec ce lexer) valider que les jetons sont comme prévu :(votre table variera en fonction du nom de l'index ; vérifiez toutes les tables comme 'DR$%$I')

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

Vous pouvez maintenant interroger la chaîne de recherche.

Apparemment, vous devez échapper le trait d'union sous la forme BAR-XYZ99 trouvera les lignes avec BAR pas contenant XYZ99; bien que la documentation du hyphen with no space est un peu différent.

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

Pour une raison quelconque (je suis sur 11.2.0.2.0), l'échappement avec des accolades ne fonctionne pas (ne renvoie aucune correspondance), mais l'utilisation d'une barre oblique inverse convient.

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