Utilisation de la recherche en texte intégral¶
Vous pouvez utiliser les fonctions de recherche pour trouver des données de caractère (texte) et des adresses IP dans des colonnes spécifiées à partir d’une ou de plusieurs tables, y compris les champs dans les colonnes VARIANT, OBJECT et ARRAY. Cette fonction recherche le texte dans des colonnes ou des chaînes spécifiées en fonction d’une liste de termes de recherche donnés. La fonction renvoie TRUE si le texte correspond aux termes de recherche spécifiés en fonction de la sémantique de recherche.
Dans la plupart des cas, vous appelez la fonction SEARCH en la spécifiant dans la liste SELECT ou la clause WHERE d’une instruction SELECT. Si la fonction est utilisée comme un filtre de la clause WHERE, la requête renvoie des lignes lorsque la fonction renvoie TRUE.
La fonction SEARCH ne nécessite aucune configuration ni aucun privilège supplémentaire. Si vous utilisez un rôle disposant des privilèges nécessaires pour accéder aux données d’une colonne, vous pouvez rechercher ces données à l’aide de la fonction SEARCH.
Les sections suivantes contiennent plus d’informations sur la fonction SEARCH et sur l’optimisation des performances de la requête lorsque vous l’utilisez :
Utilisation de la fonction SEARCH¶
La fonction SEARCH recherche des données de caractère (texte) dans des colonnes spécifiées d’une ou de plusieurs tables, y compris les champs dans les colonnes VARIANT, OBJECT et ARRAY.
Lorsque vous utilisez la fonction SEARCH, un analyseur de texte divise le texte en jetons, qui sont des unités discrètes de texte, comme des mots ou des nombres. Un analyseur par défaut est appliqué si vous n’en spécifiez pas. L’analyseur extrait les jetons à la fois des termes de recherche et des données.
Si les jetons extraits des termes de recherche correspondent aux jetons extraits d’une colonne ou d’un champ spécifié selon la sémantique de recherche, la fonction renvoie TRUE. L’argument SEARCH_MODE de la fonction spécifie l’un des modes de recherche suivants :
'OR'- La fonction utilise la sémantique disjonctive. Il y a correspondance si l’un ou l’autre des jetons extraits des colonnes ou des champs recherchés correspond à l’un ou l’autre des jetons extraits de la chaîne de recherche. Par exemple, si la valeursearch_stringest'blue red green', la fonction renvoie TRUE pour une ligne contenantblueORredORgreendans l’une des colonnes ou l’un des champs recherchés.'AND'- La fonction utilise la sémantique conjonctive. Il y a correspondance si les jetons extraits d’au moins une des colonnes ou un des champs recherchés correspondent à tous les jetons extraits de la chaîne de recherche. Les jetons correspondants doivent tous se trouver dans une colonne ou un champ. Ils ne peuvent pas être répartis sur plusieurs colonnes ou champs. Par exemple, si la valeursearch_stringest'blue red green', la fonction renvoie TRUE pour une ligne contenantblueANDredANDgreendans au moins l’une des colonnes ou l’un des champs recherchés.'PHRASE'- La fonction utilise la sémantique de correspondance des phrases. Il y a correspondance si les jetons extraits d’au moins une des colonnes ou un des champs recherchés correspondent à tous les jetons extraits de la chaîne de recherche, y compris l’ordre et l’adéquation des jetons.La sémantique de correspondance est la même que la sémantique conjonctive, à l’exception des différences suivantes :
L’ordre des jetons doit correspondre exactement. Par exemple, si la valeur
search_stringest'blue,red,green', la fonction renvoie FALSE pourred,green,blue.Aucun jeton supplémentaire ne peut être intercalé dans les données de recherche. Par exemple, si la valeur
search_stringest'blue,red,green', la fonction renvoie FALSE pourblue,yellow,red,green.
'EXACT'- La fonction utilise la sémantique de correspondance exacte. Il y a correspondance si les jetons extraits d’au moins une des colonnes ou un des champs recherchés correspondent exactement à tous les jetons extraits de la chaîne de recherche, y compris les délimiteurs.Les règles de correspondance sont les mêmes que pour la sémantique de recherche de phrases, à l’exception des différences suivantes :
Les chaînes de délimiteurs entre les jetons doivent correspondre exactement. Par exemple, si la valeur
search_stringest'blue,red,green', la fonction renvoie TRUE pour une ligne contenantblue,red,greendans au moins l’une des colonnes ou l’un des champs recherchés. La fonction renvoie FALSE pour les variations telles queblue|red|greenoublue, red, green.Lorsqu’un délimiteur est le premier ou le dernier caractère de la valeur
search_string, le délimiteur est traité comme un caractère pour la correspondance. Par conséquent, les délimiteurs à gauche et à droite du premier et du dernier délimiteur peuvent entraîner une correspondance. Par exemple, si la valeursearch_stringest'[blue]', la fonction renvoie TRUE pourfoo [blue] bar,[[blue]]et=[blue]., mais pas pour(blue)oufoo blue bar.
L’exemple suivant recherche la chaîne snow leopard dans le texte leopard avec SEARCH_MODE par défaut ('OR') et l’analyseur par défaut :
SELECT SEARCH('leopard', 'snow leopard');
+-----------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD') |
|-----------------------------------|
| True |
+-----------------------------------+
Dans l’exemple suivant, on recherche la chaîne snow leopard dans le texte lion :
SELECT SEARCH('lion', 'snow leopard');
+--------------------------------+
| SEARCH('LION', 'SNOW LEOPARD') |
|--------------------------------|
| False |
+--------------------------------+
L’exemple suivant recherche la chaîne snow leopard dans le texte leopard et spécifie 'AND' pour l’argument SEARCH_MODE :
SELECT SEARCH('leopard', 'snow leopard', search_mode => 'AND');
+---------------------------------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD', SEARCH_MODE => 'AND') |
|---------------------------------------------------------|
| False |
+---------------------------------------------------------+
Pour plus d’informations sur cette fonction et des exemples supplémentaires, voir SEARCH.
Utilisation de la fonction SEARCH_IP¶
La fonction SEARCH_IP recherche des adresses IPv4 et IPv6 valides dans des colonnes de chaînes de caractères spécifiées à partir d’une ou de plusieurs tables, y compris les champs dans les colonnes VARIANT, OBJECT et ARRAY. La recherche est basée sur un seule adresse IP que vous spécifiez. Si cette adresse IP correspond exactement à une adresse IP dans la colonne ou le champ spécifié, la fonction renvoie TRUE.
Dans l’exemple suivant, on recherche l’adresse IP 10.10.10.1 dans le texte 192.0.2.146 :
SELECT SEARCH_IP('192.0.2.146','10.10.10.1');
+---------------------------------------+
| SEARCH_IP('192.0.2.146','10.10.10.1') |
|---------------------------------------|
| False |
+---------------------------------------+
Pour plus d’informations sur cette fonction et des exemples supplémentaires, voir SEARCH_IP.
Optimisation des requêtes qui utilisent la fonction SEARCH¶
Pour améliorer les performances des requêtes qui utilisent la fonction, vous pouvez éventuellement activer l’optimisation de la recherche FULL_TEXT sur une colonne spécifique ou un ensemble de colonnes dans une table. Lorsque vous activez l’optimisation de la recherche, un nouveau chemin d’accès à la recherche est construit et maintenu.