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 IPv4 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 sur la base 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 la recherche correspondent aux jetons extraits d’une colonne ou d’un champ spécifié conformément à la sémantique de la recherche, la fonction renvoie TRUE. L’argument de la fonction SEARCH_MODE spécifie soit 'OR'
(disjonctif), soit 'AND'
(conjonctif) pour la sémantique de recherche :
Lorsque
'OR'
(valeur par défaut) est spécifié, il y a correspondance si un des jetons extraits des colonnes ou des champs de la recherche correspond à un des jetons extraits de la chaîne de recherche. Par exemple, si la valeursearch_string
est'blue red green'
, la fonction renvoie TRUE pour une ligne qui contientblue
ORred
ORgreen
dans l’une des colonnes ou l’un des champs de la recherche.Lorsque
'AND'
est spécifié, il y a correspondance si les jetons extraits d”au moins une des colonnes ou un des champs de la recherche correspondent à tous les jetons extraits de la chaîne de recherche. Les jetons correspondants doivent tous se trouver dans une seule colonne ou un seul champ ; ils ne peuvent pas être répartis dans plusieurs colonnes ou champs. Par exemple, si la valeursearch_string
est'blue red green'
, la fonction renvoie TRUE pour une ligne qui contientblue
ANDred
ANDgreen
dans au moins une des colonnes ou un des champs de la recherche.
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 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.