Auswählen einer Sprache beim Erstellen eines VolltextindexChoose a Language When Creating a Full-Text Index

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Wenn Sie einen Volltextindex erstellen, müssen Sie für die indizierte Spalte eine Spaltensprache angeben.When creating a full-text index, you need to specify a column-level language for the indexed column. Die Wörtertrennung und Wortstammerkennung der angegebenen Sprache wird von Volltextabfragen für die Spalte verwendet.The word breaker and stemmers of the specified language will be used by full-text queries on the column. Bei der Wahl der Spaltensprache für die Erstellung eines Volltextindex sind mehrere Dinge zu bedenken.There are a couple of things to consider when choosing the column language when creating a full-text index. Diese beziehen sich darauf, wie der Text von der Volltext-Engine in Token zerlegt und anschließend indiziert wird.These considerations relate to how your text is tokenized and then indexed by Full-Text Engine.

Hinweis

Um für einen Volltextindex eine Spaltensprache anzugeben, verwenden Sie beim Angeben der Spalte die Klausel language_term.To specify a column-level language for a column of full-text index, use the LANGUAGE language_term clause when specifying the column. Weitere Informationen finden Sie unter CREATE FULLTEXT INDEX (Transact-SQL) und ALTER FULLTEXT INDEX (Transact-SQL).For more information, see CREATE FULLTEXT INDEX (Transact-SQL) and ALTER FULLTEXT INDEX (Transact-SQL).

Sprachunterstützung in VolltextsucheLanguage Support in Full-Text Search

Dieser Abschnitt enthält eine Einführung in die Wörtertrennung und Wortstammerkennung und beschreibt, wie die Volltextsuche die LCID der Spaltensprache verwendet.This section provides an introduction to word breakers and stemmers, and discusses how full-text search uses the LCID of the column-level language.

Einführung in Wörtertrennung und WortstammerkennungIntroduction to Word Breakers and Stemmers

SQL Server 2008SQL Server 2008 und höhere Versionen enthalten eine vollständig neue Familie von Wörtertrennungen und Wortstammerkennungen, die im Gegensatz zu SQL ServerSQL Serverdeutlich optimiert wurden.and later versions include a complete new family of word breakers and stemmers that are significantly better than those previously available in SQL ServerSQL Server.

Hinweis

Die Microsoft Natural Language Group (MS NLG) hat diese neuen linguistischen Komponenten implementiert und bietet dazu Unterstützung an.The Microsoft Natural Language Group (MS NLG) implemented and supports these new linguistic components.

Die neuen Wörtertrennungen bieten die folgenden Vorteile:The new word breakers provide the following benefits:

  • StabilitätRobustness

    Tests haben gezeigt, dass die neuen Wörtertrennungen in anspruchsvollen Abfrageumgebungen stabil arbeiten.Testing has shown that the new word breakers are robust in high-pressure query environments.

  • SecuritySecurity

    Die neuen Wörtertrennungen sind in SQL Server standardmäßig aktiviert. Dies ist aufgrund von Sicherheitsverbesserungen der linguistischen Komponenten möglich.The new word breakers are enabled by default in SQL Server thanks to security improvements in linguistic components. Es ist sehr zu empfehlen, dass Sie signierte externe Komponenten wie Wörtertrennungen und Filter verwenden, um die Gesamtsicherheit und Stabilität von SQL Server zu verbessern.We highly recommend that external components such as word breakers and filters be signed to improve the overall security and robustness of SQL Server. Sie können Volltext wie folgt konfigurieren, um zu überprüfen, ob diese Komponenten signiert sind:You can configure full-text to verify that these components are signed as follows:

    EXEC sp_fulltext_service 'verify_signature';  
    
  • QualitätQuality

    Die Wörtertrennungen wurden neu ausgearbeitet, und Tests haben gezeigt, dass die neuen Wörtertrennungen eine bessere semantische Qualität als ihre Vorgänger aufweisen.Word breakers have been redesigned, and testing has shown that the new word breakers provide better semantic quality than previous word breakers. Auf diese Weise wird die Genauigkeit von Rückrufen erhöht.This increases the recall accuracy.

  • Für eine Vielzahl von Sprachen ist die Wörtertrennung standardmäßig in SQL Server enthalten und aktiviert.Coverage for a vast list of languages, word breakers are included in SQL Server out of the box and enabled by default.

Eine Liste der Sprachen, für die SQL Server eine Wörtertrennung und Wortstammerkennung enthält, finden Sie unter 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).

Verwenden des Namens der Spaltensprache durch die VolltextsucheHow Full-Text Search Uses the Name of the Column-Level Language

Beim Erstellen eines Volltextindex müssen Sie für jede Spalte einen gültigen Sprachennamen angeben.When creating a full-text index, you need to specify a valid language name for each column. Wenn ein Sprachenname gültig ist, von der Katalogsicht sys.fulltext_languages (Transact-SQL) jedoch nicht zurückgegeben wird, greift die Volltextsuche, falls vorhanden, auf einen ähnlichen Sprachennamen der jeweiligen Sprachengruppe zurück.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. Andernfalls verwendet die Volltextsuche die neutrale Wörtertrennung.Otherwise, full-text search falls back to the Neutral word breaker. Dieses Verhalten kann sich ggf. auf die Genauigkeit der Rückrufe auswirken.This fall-back behavior might affect the recall accuracy. Es ist daher sehr zu empfehlen, dass Sie beim Erstellen eines Volltextindex für jede Spalte einen gültigen und verfügbaren Sprachennamen angeben.Therefore we strongly recommend that you specify a valid and available language name for each column when creating a full-text index.

Hinweis

Die LCID wird für alle Datentypen verwendet, die für die Volltextindizierung geeignet sind (z. B. char oder nchar).The LCID is used against all data types eligible for full-text indexing (such as char or nchar). Auch wenn die Sortierreihenfolge einer Spalte vom Typ char, varcharoder text auf eine andere Sprache als die von der LCID vorgegebenen festgelegt ist, wird die LCID während der Volltextindizierung und -abfrage dieser Spalten trotzdem verwendet.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.

WorttrennungWord Breaking

Bei der Wörtertrennung wird der zu indizierende Text an den sprachspezifischen Wortgrenzen zerlegt.A word breaker tokenizes the text being indexed on word boundaries, which are language-specific. Aus diesem Grund unterscheidet sich das Wörtertrennungsverhalten für die einzelnen Sprachen.Therefore, word-breaking behavior differs among different languages. Wenn Sie eine Sprache „x“ verwenden, um mehrere Sprachen {x, y und z} zu indizieren, kann es ggf. zu unerwartetem Verhalten und Ergebnissen kommen.If you use one language, x, to index a number of languages {x, y, and z}, some of the behavior might cause unexpected results. Ein Bindestrich (-) oder ein Komma (,) kann z. B. ein Wörtertrennungselement sein, das in einer Sprache verworfen wird, in einer anderen Sprache jedoch beibehalten wird.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. Außerdem kann ggf. auch unerwartetes Verhalten bei der Wortstammerkennung auftreten, da ein Wort für verschiedene Sprachen unterschiedliche Stämme aufweisen kann.Also rarely unexpected stemming behavior might occur because a given word might stem differently in different language. Im Englischen sind Wortgrenzen z. B. meist Leerzeichen oder Satzzeichen.For example, in the English language, word boundaries are typically white space or some form of punctuation. In anderen Sprachen, z. B. Deutsch, können dabei Wörter oder Zeichen kombiniert werden.In other languages, such as German, words or characters may be combined together. Daher sollte die gewählte Spaltensprache die Sprache sein, die voraussichtlich in den Zeilen der Spalte gespeichert wird.Therefore, the column-level language that you choose should represent the language that you expect will be stored in rows of that column.

Westliche SprachenWestern Languages

Wenn Sie bei den westlichen Sprachen unsicher sein sollten, welche Sprachen in einer Spalte gespeichert werden, oder wenn in Spalten mehr als eine Sprache gespeichert werden soll, können Sie als Lösung die Wörtertrennung für die komplexeste Sprache verwenden, die voraussichtlich in der Spalte gespeichert wird.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. Es kann z. B. sein, dass Sie englischen, spanischen und deutschen Text in einer Spalte speichern möchten.For instance, you might expect to store English, Spanish and German content in a single column. Diese drei westlichen Sprachen weisen sehr ähnliche Wörtertrennungsmuster auf, wobei die Muster von Deutsch am komplexesten sind.These three Western languages possess very similar word-breaking patterns, with the German patterns being the most complex. In diesem Fall wäre also die Wörtertrennung für Deutsch eine gute Wahl, weil auch der englische und spanische Text weitestgehend richtig verarbeitet werden würde.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. Im Gegensatz dazu würde die Wörtertrennung für Englisch den deutschen Text ggf. nicht richtig verarbeiten, weil im Deutschen viele Komposita verwendet werden.In contrast, the English word breaker might not process German text perfectly because of the compound words of German.

Beachten Sie, dass durch die Verwendung der Wörtertrennung der komplexesten Sprache einer Gruppe von Sprachen nicht sichergestellt ist, dass jede Sprache der Gruppe richtig indiziert wird.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. Es können Ausnahmefälle auftreten, in denen die komplexeste Wörtertrennung Text, der in einer anderen Sprache geschrieben ist, nicht richtig verarbeiten kann.Corner cases might exist in which the most complex word breaker cannot correctly handle text written in another language.

Andere Sprachen als westliche SprachenNon Western Languages

Bei anderen Sprachen (wie Chinesisch, Japanisch, Hindi usw.) funktioniert die oben beschriebene Lösung aus linguistischen Gründen nicht immer.For non Western languages (such as Chinese, Japanese, Hindi, and so forth) the above workaround does not necessarily work, for linguistic reasons. Für andere Sprachen als westliche Sprachen können Sie folgende Lösung in Betracht ziehen:For non Western languages, consider one of the following workarounds:

  • Sprachen unterschiedlicher SprachgruppenFor languages from different families

    Wenn eine Spalte sehr unterschiedliche Sprachen enthalten könnte, z. B. Spanisch und Japanisch, sollten Sie überlegen, ob die Sprachen in separaten Spalten gespeichert werden können.If a column might contain dramatically different languages, for example, Spanish and Japanese, consider storing the content of different languages in separate columns. Dies würde es Ihnen ermöglichen, für jede Spalte die sprachspezifische Wörtertrennung zu verwenden.This would allow you to use the language-specific word breaker for each column. Wenn Sie diese Lösung wählen und die Abfragesprache zur Abfragezeit nicht kennen, müssen Sie die Abfrage ggf. für beide Spalten stellen, um sicherzustellen, dass die richtige Zeile bzw. das richtige Dokument gefunden wird.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.

  • Für binären Inhalt (z. B. Microsoft Word-Dokumente)For Binary content (such as Microsoft Word documents)

    Wenn der indizierte Inhalt den Typ binary aufweist, beachtet der Filter für die Volltextsuche, der den Text vor dem Senden an die Wörtertrennung verarbeitet, ggf. die in der binären Daten enthaltenen spezifischen Sprachtags.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. In diesem Fall gibt der Filter bei der Indizierung die richtige LCID für ein Dokument oder einen Abschnitt eines Dokuments aus.In this case, at indexing time, the filter will emit the right LCID for a document or section of a document. Die Volltext-Engine ruft mit dieser LCID dann die Wörtertrennung für die Sprache auf.The Full-Text Engine will then call the word breaker for the language with that LCID. Nach dem Indizieren von mehrsprachigem Inhalt ist es jedoch ratsam, den Inhalt auf die richtige Indizierung zu überprüfen.However, after indexing multi language content, we recommend that you verify that the content was correctly indexed.

  • Nur-Text-InhaltFor plain text content

    Wenn Sie Nur-Text-Inhalte verwenden, können Sie diese in den Datentyp xml konvertieren und Sprachtags hinzufügen, die für ein Dokument oder einen Dokumentabschnitt jeweils die entsprechende Sprache angeben.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. Dazu müssen Sie vor der Volltextindizierung jedoch die Sprache kennen.For this to work, however, you need to know the language before full-text indexing.

WortstammerkennungStemming

Ein weiterer Aspekt, den Sie beim Wählen der Spaltensprache berücksichtigen sollten, ist die Wortstammerkennung.An additional consideration when choosing your column-level language is stemming. AlsWortstammerkennung wird bei Volltextabfragen die Suche nach allen Flexionsformen eines Worts in einer bestimmten Sprache bezeichnet.Stemming in full-text queries is the process of searching for all stemmed (inflectional) forms of a word in a particular language. Wenn Sie zum Verarbeiten mehrerer Sprachen eine generische Wörtertrennung verwenden, funktioniert die Wortstammerkennung nur für die Sprache, die für die Spalte angegeben ist, jedoch nicht für andere in der Spalte enthaltene Sprachen.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. Die Wortstammerkennung für Deutsch funktioniert beispielsweise nicht für Englisch oder Spanisch usw.For example, German stemmers do not work for English or Spanish (and so forth). Dies kann sich je nach Sprache, die Sie zur Abfragezeit auswählen, auf Rückrufvorgänge auswirken.This might affect your recall depending on which language you choose at query time.

Auswirkung des Spaltentyps auf VolltextsucheEffect of Column Type on Full-Text Search

Ein weiterer Aspekt bei der Wahl der Sprache ist die Art und Weise, wie die Daten dargestellt werden.Another consideration in language choice is related to how the data is represented. Für Daten, die nicht in varbinary(max) -Spalten gespeichert sind, erfolgt keine spezielle Filterung.For data that is not stored in varbinary(max) column, no special filtering is performed. Stattdessen durchläuft der Text die Worteinheitenerkennungs-Komponente i. A. unverändert.Rather, the text is generally passed through the word breaking component as-is.

Die Wörtertrennung ist außerdem hauptsächlich für die Verarbeitung von geschriebenem Text konzipiert.Also, word breakers are designed mainly to process written text. Für Text mit speziellen Auszeichnungen (wie z. B. HTML) wird möglicherweise keine große linguistische Genauigkeit bei der Indizierung und Suche erreicht.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. In diesem Fall haben Sie zwei Möglichkeiten. Die bevorzugte Methode besteht darin, die Textdaten in einer varbinary(max)-Spalte zu speichern und den Dokumenttyp anzugeben, sodass die Daten gefiltert werden können.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. Ist dies nicht machbar, können Sie u. U. die neutrale Wörtertrennung verwenden und ggf. den Füllwortlisten Markupdaten (wie "br" in HTML) hinzufügen.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.

Hinweis

Eine sprachbasierte Wortstammerkennung ist nicht möglich, wenn Sie die neutrale Sprache angeben.Language based stemming does not come into play when you specify the neutral language.

Angeben einer nicht standardmäßigen Spaltensprache in einer VolltextabfrageSpecifying a Non-default Column-Level Language in a Full-Text Query

In SQL ServerSQL Serveranalysiert eine Volltextsuche standardmäßig die Abfrageausdrücke, indem die Sprache verwendet wird, die für die einzelnen Spalten angegeben ist, die in der Volltextklausel enthalten sind.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. Um dieses Verhalten zu überschreiben, geben Sie zur Abfragezeit eine nicht standardmäßige Sprache an.To override this behavior, specify a nondefault language at query time. Für unterstützte Sprachen mit installierten Ressourcen können Sie die LANGUAGE language_term Klausel einer CONTAINS-, CONTAINSTABLE-, FREETEXT- oder FREETEXTTABLE -Abfrage verwenden, um die Sprache anzugeben, die für die Abfrageausdrücke in Bezug auf Wörtertrennung, Wortstammerkennung, Thesaurus und Stoppwörter genutzt wird.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.

Weitere InformationenSee Also

CONTAINS (Transact-SQL) CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
Datentypen (Transact-SQL) Data Types (Transact-SQL)
FREETEXT (Transact-SQL) FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL) FREETEXTTABLE (Transact-SQL)
Konfigurieren und Verwalten von Filtern für die Suche 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)
Konfigurieren und Verwalten von Wörtertrennungen und Wortstammerkennungen für die SucheConfigure and Manage Word Breakers and Stemmers for Search