FREETEXT (Transact-SQL)

Mis à jour : 14 avril 2006

Prédicat utilisé pour rechercher dans les colonnes contenant des types de données à base de caractères les valeurs qui correspondent à la signification et non pas à la syntaxe exacte des mots dans la condition de recherche. Lorsque FREETEXT est utilisé, le moteur de recherche de texte intégral effectue les actions suivantes sur la chaîne freetext_string, il affecte un poids à chaque terme, puis il recherche les correspondances.

  • Il scinde la chaîne en mots en se basant sur les limites de mot (coupure de mots).
  • Il génère des formes fléchies des mots (extraction de la racine).
  • Il identifie une liste d'extensions ou de substituts en fonction des correspondances fournies par le dictionnaire des synonymes.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

FREETEXT ( { column_name | (column_list) | * } 
          , 'freetext_string' [ , LANGUAGE language_term ] )

Arguments

  • column_name
    Nom de la colonne enregistrée pour la recherche de texte intégral. Les colonnes de type char, varchar, nchar, nvarchar, text, ntext, image, xml et varbinary(max) représentent des colonnes valides pour la recherche de texte intégral.
  • column_list
    Indique que plusieurs colonnes, délimitées par des virgules, peuvent être spécifiées. L'argument column_list doit être placé entre parenthèses. Une seule et même langue doit être utilisée dans toutes les colonnes de column_list, sauf si language_term est spécifié.
  • *
    Précise que toutes les colonnes enregistrées pour la recherche de texte intégral doivent être utilisées pour rechercher la chaîne freetext_string donnée. Si la clause FROM comporte plusieurs tables, * doit être qualifié par le nom de la table. Si language_term n'est pas précisé, la langue de toutes les colonnes de la table doit être la même.
  • freetext_string
    Texte à rechercher dans column_name. Tout texte, y compris des mots, expressions et phrases peuvent être entrés. La recherche retourne des correspondances si elle trouve des termes ou des formes de termes identiques dans l'index de texte intégral.

    L'argument freetext_string est de type nvarchar. Une conversion implicite se produit lorsqu'un autre type de données character est utilisé comme entrée. Dans l'exemple suivant, la variable @SearchWord, à laquelle est attribuée la valeur varchar(30), provoque une conversion implicite dans le prédicat FREETEXT.

    USE AdventureWorks;
    GO
    DECLARE @SearchWord varchar(30)
    SET @SearchWord ='performance'
    SELECT Description 
    FROM Production.ProductDescription 
    WHERE FREETEXT(Description, @SearchWord);
    

    Étant donné que la détection des paramètres ne fonctionne pas lors de la conversion, utilisez nvarchar afin d'obtenir de meilleures performances. Dans l'exemple, déclarez @SearchWord en tant que nvarchar(30).

    USE AdventureWorks;
    GO
    DECLARE @SearchWord nvarchar(30)
    SET @SearchWord = N'performance'
    SELECT Description 
    FROM Production.ProductDescription 
    WHERE FREETEXT(Description, @SearchWord);
    

    Vous pouvez également utiliser l'indicateur de requête OPTIMIZE FOR lorsqu'un plan non optimal est généré.

    À la différence de la condition de recherche CONTAINS où AND est un mot clé, le mot « and » est considéré comme un mot non significatif dans freetext_string et il est ignoré.

    L'utilisation de WEIGHT, de FORMSOF, de caractères génériques, de NEAR et d'autres syntaxes n'est pas autorisée. La chaîne freetext_string est découpée en mots dont les racines sont extraites et traitées par le dictionnaire des synonymes. Si freetext_string est entre guillemets doubles, c'est une correspondance globale qui est recherchée ; les étapes d'extraction de racines et de comparaison au dictionnaire des synonymes ne sont pas effectuées.

  • LANGUAGE language_term
    Langue dont les ressources seront utilisées pour la coupure des mots, l'extraction de racines, le dictionnaire de synonymes et la suppression des mots non significatifs dans la requête FREETEXT. Ce paramètre est facultatif et peut être défini comme une chaîne, un entier ou une valeur hexadécimale correspondant à l'identificateur de paramètres régionaux (LCID) d'une langue. Si vous spécifiez language_term, la langue qu'il représente est appliquée à tous les éléments de la condition de recherche. Si aucune valeur n'est indiquée, la langue de texte intégral de la colonne est utilisée.

    Lorsqu'il est spécifié sous forme de chaîne, language_term correspond à la valeur de la colonne alias de la table système syslanguages. La chaîne doit être placée entre guillemets simples, par exemple 'language_term'. Lorsqu'il est spécifié sous forme de nombre entier, language_term représente le LCID réel qui identifie la langue. Quand il est spécifié comme valeur hexadécimale, language_term est 0x suivi de la valeur hexadécimale du LCID. La valeur hexadécimale ne doit pas dépasser huit caractères, y compris les zéros non significatifs.

    Si la valeur est au format de jeu de caractères codés sur deux octets (DBCS), Microsoft SQL Server la convertit en Unicode.

    Si la langue spécifiée n'est pas valide ou s'il n'existe aucune ressource installée correspondant à cette langue, Microsoft SQL Server retourne une erreur. Pour utiliser les ressources de langue neutre, spécifiez 0x0 pour language_term.

Notes

Les recherches de texte intégral qui utilisent FREETEXT sont moins précises que celles qui utilisent CONTAINS. Le moteur de recherche de texte intégral de SQL Server identifie les expressions et les mots importants. Aucune signification particulière n'est donnée aux mots clés réservés ni aux caractères génériques qui ont généralement un sens lorsqu'ils sont précisés dans le paramètre <contains_search_condition> du prédicat CONTAINS.

FREETEXT n'est pas reconnu comme mot clé si le niveau de compatibilité est inférieur à 70. Pour plus d'informations, consultez sp_dbcmptlevel (Transact-SQL).

Exemples

A. Utilisation de FREETEXT pour rechercher des mots contenant les valeurs de type caractère spécifiées

L'exemple suivant recherche tous les documents contenant les mots liés à « vital », « safety» et « components ».

USE AdventureWorks;
GO
SELECT Title
FROM Production.Document
WHERE FREETEXT (Document, 'vital safety components' );
GO

B. Utilisation de FREETEXT avec des variables

L'exemple ci-dessous utilise une variable à la place d'un terme de recherche spécifique.

USE AdventureWorks;
GO
DECLARE @SearchWord nvarchar(30);
SET @SearchWord = N'high-performance';
SELECT Description 
FROM Production.ProductDescription 
WHERE FREETEXT(Description, @SearchWord);
GO

Voir aussi

Référence

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Types de données (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
WHERE (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

14 avril 2006

Nouveau contenu :
  • Ajout d'informations sur la réalisation de conversions sans les valeurs freetext_string.