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.
When you use the SEARCH function, a text analyzer breaks the text into tokens, which are discrete units of text, such as words or numbers. A default analyzer is applied if you don’t specify one. The analyzer extracts tokens from both the search terms and the data.
If tokens extracted from the search terms match tokens extracted from a specified column or field according to the search semantics, the function returns TRUE. The SEARCH_MODE function argument specifies one of the following search modes:
'OR'- The function uses disjunctive semantics. There is a match if any of the tokens extracted from the columns or fields being searched match any of the tokens extracted from the search string. For example, if thesearch_stringvalue is'blue red green', the function returns TRUE for a row that containsblueORredORgreenin any of the columns or fields being searched.'AND'- The function uses conjunctive semantics. There is a match if the tokens extracted from at least one of the columns or fields being searched matches all of the tokens extracted from the search string. The matching tokens must all be in one column or field; they can’t be spread across multiple columns or fields. For example, if thesearch_stringvalue is'blue red green', the function returns TRUE for a row that containsblueANDredANDgreenin at least one of the columns or fields being searched.'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.