Choisir une langue lors de la création d'un index de recherche en texte intégralChoose a Language When Creating a Full-Text Index

Lorsque vous créez un index de recherche en texte intégral, vous devez spécifier une langue au niveau de la colonne pour la colonne indexée.When creating a full-text index, you need to specify a column-level language for the indexed column. L’ analyseur lexical et les générateurs de formes dérivées de la langue spécifiée seront utilisés par les requêtes de texte intégral sur la colonne.The word breaker and stemmers of the specified language will be used by full-text queries on the column. Plusieurs aspects doivent être pris en considération pour le choix de la langue d'une colonne lors de la création d'un index de texte intégral.There are a couple of things to consider when choosing the column language when creating a full-text index. Ces aspects sont liés à la façon dont les unités lexicales de votre texte sont créées et à la façon dont ce texte est ensuite indexé par le Moteur d'indexation et de recherche en texte intégral.These considerations relate to how your text is tokenized and then indexed by Full-Text Engine.

Note

Pour spécifier une langue au niveau de la colonne pour une colonne d’index de recherche en texte intégral, utilisez la clause LANGUAGE language_term lors de la spécification de la colonne.To specify a column-level language for a column of full-text index, use the LANGUAGE language_term clause when specifying the column. Pour plus d’informations, consultez CREATE FULLTEXT INDEX (Transact-SQL) et ALTER FULLTEXT INDEX (Transact-SQL).For more information, see CREATE FULLTEXT INDEX (Transact-SQL) and ALTER FULLTEXT INDEX (Transact-SQL).

Prise en charge linguistique dans la recherche en texte intégral Language Support in Full-Text Search

Cette section fournit une introduction aux analyseurs lexicaux et aux générateur de formes dérivées et indique comment la recherche en texte intégral utilise le LCID de la langue de la colonne.This section provides an introduction to word breakers and stemmers, and discusses how full-text search uses the LCID of the column-level language.

Introduction aux analyseurs lexicaux et aux générateurs de formes dérivéesIntroduction to Word Breakers and Stemmers

SQL Server 2008SQL Server 2008 et versions ultérieures incluent une nouvelle famille complète d’analyseurs lexicaux et de générateurs de formes dérivées qui sont considérablement plus performants que ceux précédemment disponibles dans SQL ServerSQL Server..

Note

Le Microsoft Natural Language Group (MS NLG) a implémenté et prend en charge ces nouveaux composants linguistiques.The Microsoft Natural Language Group (MS NLG) implemented and supports these new linguistic components.

Les avantages de ces nouveaux analyseurs lexicaux sont les suivants :The new word breakers provide the following benefits:

  • RobustesseRobustness

    Les tests ont montré que les nouveaux analyseurs lexicaux sont fiables dans les environnements de requête de haute intensité.Testing has shown that the new word breakers are robust in high-pressure query environments.

  • SécuritéSecurity

    Les nouveaux analyseurs lexicaux sont activés par défaut dans SQL Server grâce aux améliorations de sécurité apportées aux composants linguistiques.The new word breakers are enabled by default in SQL Server thanks to security improvements in linguistic components. Nous recommandons vivement que les composants externes tels que les analyseurs lexicaux et filtres soient signés afin d’améliorer la sécurité globale et la robustesse de SQL Server.We highly recommend that external components such as word breakers and filters be signed to improve the overall security and robustness of SQL Server. Vous pouvez configurer le texte intégral pour vérifier que ces composants sont signés comme suit :You can configure full-text to verify that these components are signed as follows:

    EXEC sp_fulltext_service 'verify_signature';  
    
  • QualitéQuality

    Les analyseurs lexicaux ont été repensés, et les tests ont montré que les nouveaux analyseurs lexicaux fournissent une qualité sémantique supérieure à celle des analyseurs lexicaux précédents.Word breakers have been redesigned, and testing has shown that the new word breakers provide better semantic quality than previous word breakers. Cela augmente l'exactitude de rappel.This increases the recall accuracy.

  • Pour couvrir une longue liste de langues, les analyseurs lexicaux sont inclus d’emblée dans SQL Server et sont activés par défaut.Coverage for a vast list of languages, word breakers are included in SQL Server out of the box and enabled by default .

    Pour obtenir la liste des langues pour lesquelles SQL Server comprend des analyseurs lexicaux et des générateurs de formes dérivées, consultez sys.fulltext_languages (Transact-SQL).For a list of the languages for which SQL Server includes a word breaker and stemmers, see sys.fulltext_languages (Transact-SQL).

Comment la recherche en texte intégral utilise le nom de la langue de la colonneHow Full-Text Search Uses the Name of the Column-Level Language

Lorsque vous créez un index de recherche en texte intégral, vous devez spécifier un nom de langue valide pour chaque colonne.When creating a full-text index, you need to specify a valid language name for each column. Si un nom de langue est valide mais n’est pas retourné par l’affichage catalogue sys.fulltext_languages (Transact-SQL) , la recherche en texte intégral revient, le cas échéant, au nom de la langue disponible le plus proche de la même famille de langues.If a language name is valid but not returned by the sys.fulltext_languages (Transact-SQL) catalog view, full-text search falls back to the closest available language name of the same language family, if any. Sinon, la recherche en texte intégral revient à l'analyseur lexical neutre.Otherwise, full-text search falls back to the Neutral word breaker. Ce comportement de repli peut affecter l'exactitude de rappel.This fall-back behavior might affect the recall accuracy. Par conséquent, nous vous recommandons vivement de spécifier un nom de langue valide et disponible pour chaque colonne lors de la création d'un index de recherche en texte intégral.Therefore we strongly recommend that you specify a valid and available language name for each column when creating a full-text index.

Note

Le LCID est appliqué à tous les types de données pouvant faire l’objet d’une indexation de texte intégral (par exemple char ou nchar).The LCID is used against all data types eligible for full-text indexing (such as char or nchar). Si l’ordre de tri d’une colonne de type char, varcharou text est défini à l’aide d’une langue différente de la langue identifiée par le LCID, ce dernier est néanmoins utilisé durant l’indexation de recherche en texte intégral et l’interrogation de ces colonnes.If you have the sort order of a char, varchar, or text type column set to a language setting different from the language identified by the LCID, the LCID is used anyway during full-text indexing and querying of those columns.

Analyse lexicale Word Breaking

Un analyseur lexical crée des jetons dans le texte indexé à partir des limites des mots, qui sont spécifiques aux langues.A word breaker tokenizes the text being indexed on word boundaries, which are language specific. Par conséquent, le comportement d'analyse lexicale diffère d'une langue à l'autre.Therefore, word-breaking behavior differs among different languages. Si vous utilisez une langue x indexer plusieurs langues {x, y et z}, une partie du comportement peut donner lieu à des résultats inattendus.If you use one language, x, to index a number of languages {x, y, and ,z}, some of the behavior might cause unexpected results. Par exemple, un tiret (-) ou une virgule (,) peut être un élément d'analyseur lexical pouvant être rejeté dans une langue mais pas dans un autre.For example, a dash (-) or a comma (,) might be a word-break element that will be thrown away in one language but not in another. Un comportement de génération de formes dérivées rarement inattendu peut également se produire parce qu'un mot donné peut être dérivé différemment dans une autre langue.Also rarely unexpected stemming behavior might occur because a given word might stem differently in different language. Par exemple, en anglais, les limites des mots sont généralement fixées par des espaces blancs ou un signe de ponctuation.For example, in the English language, word boundaries are typically white space or some form of punctuation. Dans d'autres langues, par exemple l'allemand, les mots ou les caractères peuvent être accolés.In other languages, such as German, words or characters may be combined together. Par conséquent, le choix de la langue d'une colonne doit être représentatif de la langue destinée à être stockée dans les lignes de cette colonne.Therefore, the column-level language that you choose should represent the language that you expect will be stored in rows of that column.

Langues occidentalesWestern Languages

Pour la famille des langues occidentales, si vous êtes incertain quant aux langues qui seront stockées dans une colonne ou si vous pensez en stocker plusieurs, la solution de contournement générale est d'utiliser l'analyseur lexical pour la langue la plus complexe pouvant être stockée dans la colonne.For the Western family of languages, if you are unsure which languages will be stored in a column or you expect more than one to be stored, a general workaround is to use the word breaker for the most complex language that might be stored in the column. Par exemple, vous pouvez vous attendre à stocker du contenu en anglais, en espagnol et en allemand dans une colonne unique.For instance, you might expect to store English, Spanish and German content in a single column. Ces trois langues occidentales possèdent des modes d'analyse lexicale très semblables, les modes allemands étant les plus complexes.These three Western languages possess very similar word-breaking patterns, with the German patterns being the most complex. Par conséquent, un bon choix dans ce cas serait d'utiliser l'analyseur lexical allemand, qui doit être en mesure de traiter le texte anglais et espagnol correctement.Therefore, a good choice is this case would be to use the German word breaker, which should be able to process English and Spanish text correctly. Par contre, il se peut que l'analyseur lexical anglais ne puisse pas traiter parfaitement le texte allemand à cause des mots composés allemands.In contrast, the English word breaker might not process German text perfectly because of the compound words of German.

Notez que l'utilisation de l'analyseur lexical de la langue la plus complexe dans une famille de langues ne garantit pas l'indexation parfaite de chaque langue de la famille.Note that using the word breaker of the most complex language in a language family does not guarantee perfect indexing of every language in the family. Il peut y avoir des cas où l'analyseur lexical le plus complexe ne peut pas gérer correctement le texte écrit dans une autre langue.Corner cases might exist in which the most complex word breaker cannot correctly handle text written in another language.

Langues non occidentalesNon Western Languages

Pour les langues non occidentales (telles que chinois, japonais, hindi, etc.), la solution de contournement précitée ne fonctionne pas nécessairement, pour des raisons linguistiques.For non Western languages (such as Chinese, Japanese, Hindi, and so forth) the above workaround does not necessarily work, for linguistic reasons. Pour les langues non occidentales, considérez l'une des solutions de contournement suivantes :For non Western languages, consider one of the following workarounds:

  • Pour les langues de familles différentesFor languages from different families

    Si une colonne peut contenir des langues complètement différentes, par exemple l'espagnol et le japonais, pensez à stocker le contenu de langues différentes dans des colonnes séparées.If a column might contain dramatically different languages, for example, Spanish and Japanese, consider storing the content of different languages in separate columns. Cela vous permettrait d'utiliser l'analyseur lexical spécifique à une langue pour chaque colonne.This would allow you to use the language-specific word breaker for each column. Si vous choisissez cette solution et que vous ne connaissez pas la langue de la requête à l'heure de la requête, vous pouvez devoir lancer la requête par rapport aux deux colonnes afin de faire en sorte que la requête recherche la bonne ligne ou le bon document.If you choose this solution and you don't know the query language at query time, you might need to issue the query against both columns to ensure that the query finds the right row or document.

  • Pour le contenu binaire (par exemple, les documents Microsoft Word)For Binary content (such as Microsoft Word documents)

    Lorsque le contenu indexé est de type binaire , le filtre de recherche en texte intégral qui traite le contenu textuel avant de l’envoyer à l’analyseur lexical peut respecter des balises de langue spécifiques existantes dans le fichier binaire.When the indexed content is of binary type, the full-text search filter that processes the textual content before sending it to the word breaker might honor specific language tags existing within the binary file. Dans ce cas, au moment de l'indexation, le filtre émettra le bon LCID pour un document ou une section d'un document.In this case, at indexing time, the filter will emit the right LCID for a document or section of a document. Le moteur d'indexation et de recherche en texte intégral appellera ensuite l'analyseur lexical pour la langue correspondant à ce LCID.The Full-Text Engine will then call the word breaker for the language with that LCID. Toutefois, après avoir indexé un contenu multilingue, nous vous recommandons de vérifier que le contenu a été indexé correctement.However, after indexing multi language content, we recommend that you verify that the content was correctly indexed.

  • Pour un contenu de texte brutFor plain text content

    Lorsque votre contenu est du texte brut, vous pouvez le convertir en type de données xml et ajouter les balises de langue qui indiquent la langue qui correspond à chaque document ou section de document spécifique.When your content is plain text, you can convert it to the xml data type and add language tags that indicate the language corresponding to each specific document or document section. Pour que cette option fonctionne toutefois, vous devez connaître la langue avant l'indexation de recherche en texte intégral.For this to work, however, you need to know the language before full-text indexing.

Recherche de radical Stemming

La recherche de radical est un autre point à prendre en considération lors du choix de la langue de votre colonne.An additional consideration when choosing your column-level language is stemming. Larecherche de radical dans les requêtes de texte intégral se définit comme la recherche de toutes les formes fléchies d’un mot dans une langue particulière.Stemming in full-text queries is the process of searching for all stemmed (inflectional) forms of a word in a particular language. Lorsque vous utilisez un analyseur lexical générique pour traiter plusieurs langues, le processus de recherche de radical fonctionne uniquement pour la langue spécifiée pour la colonne, et non pour d'autres langues dans la colonne.When you use a generic word breaker to process several languages, the stemming process works only for the language specified for the column, not for other languages in the column. Par exemple, les générateur de formes dérivées allemands ne fonctionnent pas pour l'anglais et l'espagnol (etc.).For example, German stemmers do not work for English or Spanish (and so forth). Cela peut affecter votre rappel, selon la langue que vous choisissez au moment de la requête.This might affect your recall depending of which language you choose at query time.

Effet du type de colonne sur la recherche en texte intégral Effect of Column Type on Full-Text Search

Un autre point à prendre en considération dans le choix de la langue est lié au mode de représentation des données.Another consideration in language choice is related to how the data is represented. Pour les données non stockées dans une colonne varbinary(max) , aucun filtrage particulier n’est effectué.For data that is not stored in varbinary(max) column, no special filtering is performed. À la place, le texte est généralement traité tel quel par le composant de séparation des mots.Rather, the text is generally passed through the word breaking component as-is.

Les analyseurs lexicaux sont, aussi, principalement conçus pour traiter le texte écrit.Also, word breakers are designed mainly to process written text. Par conséquent, si votre texte contient un balisage quelconque (par exemple du code HTML), vous risquez de ne pas obtenir une précision linguistique importante durant l'indexation et la recherche.So, if you have any type of markup (such as HTML) on your text, you may not get great linguistic accuracy during indexing and search. Dans ce cas, vous avez deux possibilités : la méthode recommandée consiste simplement à stocker les données de texte dans la colonne varbinary(max) et à indiquer le type de document correspondant pour permettre un filtrage.In that case, you have two choices—the preferred method is simply to store the text data in varbinary(max) column, and to indicate its document type so it may be filtered. Si ce choix ne vous convient pas, utilisez un analyseur lexical neutre et, si possible, ajoutez des données de balisage (par exemple « br » en langage HTML) à vos listes de mots parasites.If this is not an option, you may consider using the neutral word breaker and, if possible, adding markup data (such as 'br' in HTML) to your noise word lists.

Note

L'identification de la racine linguistique n'intervient pas lorsque vous spécifiez la langue neutre.Language based stemming does not come into play when you specify the neutral language.

Spécification d'une langue de colonne autre que la langue par défaut dans un requête de texte intégral Specifying a Non-default Column-Level Language in a Full-Text Query

Par défaut, dans SQL ServerSQL Server, la recherche en texte intégral analyse les termes de la requête en utilisant la langue spécifiée pour chaque colonne incluse dans la clause de texte intégral.By default, in SQL ServerSQL Server, full-text search will parse the query terms using the language specified for each column that is included in the full-text clause. Pour remplacer ce comportement, spécifiez une langue autre que par défaut au moment de la requête.To override this behavior, specify a nondefault language at query time. Pour les langues prises en charge dont les ressources sont installées, la clause LANGUAGE language_term d’une requête CONTAINS, CONTAINSTABLE, FREETEXTou FREETEXTTABLE est utilisée pour spécifier la langue utilisée pour l’analyse lexicale, la recherche de radical, le dictionnaire des synonymes et le traitement des mots vides des termes de la requête.For supported languages whose resources are installed, the LANGUAGE language_term clause of a CONTAINS, CONTAINSTABLE, FREETEXT, or FREETEXTTABLE query can be used to specify the language used for word breaking, stemming, thesaurus, and stopword processing of the query terms.

Voir aussiSee Also

CONTAINS (Transact-SQL) CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
Types de données (Transact-SQL) Data Types (Transact-SQL)
FREETEXT (Transact-SQL) FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL) FREETEXTTABLE (Transact-SQL)
Configurer et gérer des filtres pour la recherche Configure and Manage Filters for Search
sp_fulltext_service (Transact-SQL) sp_fulltext_service (Transact-SQL)
sys.fulltext_languages (Transact-SQL) sys.fulltext_languages (Transact-SQL)
Configurer et gérer les analyseurs lexicaux et générateurs de formes dérivées pour la recherche Configure and Manage Word Breakers and Stemmers for Search