Auswählen einer Sprache beim Erstellen eines Volltextindex
Gilt für: SQL Server Azure SQL-Datenbank
Wenn Sie einen Volltextindex erstellen, müssen Sie für die indizierte Spalte eine Spaltensprache angeben. Die Wörtertrennung und Wortstammerkennung der angegebenen Sprache wird von Volltextabfragen für die Spalte verwendet. Bei der Wahl der Spaltensprache für die Erstellung eines Volltextindex sind mehrere Dinge zu bedenken. Diese beziehen sich darauf, wie der Text von der Volltext-Engine in Token zerlegt und anschließend indiziert wird.
Hinweis
Um für einen Volltextindex eine Spaltensprache anzugeben, verwenden Sie beim Angeben der Spalte die Klausel language_term . Weitere Informationen finden Sie unter CREATE FULLTEXT INDEX (Transact-SQL) und ALTER FULLTEXT INDEX (Transact-SQL).
Sprachunterstützung in Volltextsuche
Dieser Abschnitt enthält eine Einführung in die Wörtertrennung und Wortstammerkennung und beschreibt, wie die Volltextsuche die LCID der Spaltensprache verwendet.
Einführung in Wörtertrennung und Wortstammerkennung
SQL Server 2008 (10.0.x) und höhere Versionen enthalten eine vollständig neue Familie von Wörtertrennungen und Wortstammerkennungen, die gegenüber den bisher in SQL Server verfügbaren deutlich optimiert wurden.
Hinweis
Die Microsoft Natural Language Group (MS NLG) hat diese neuen linguistischen Komponenten implementiert und bietet dazu Unterstützung an.
Die neuen Wörtertrennungen bieten die folgenden Vorteile:
Stabilität
Tests haben gezeigt, dass die neuen Wörtertrennungen in anspruchsvollen Abfrageumgebungen stabil arbeiten.
Sicherheit
Die neuen Wörtertrennungen sind in SQL Server standardmäßig aktiviert. Dies ist aufgrund von Sicherheitsverbesserungen der linguistischen Komponenten möglich. 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. Sie können Volltext wie folgt konfigurieren, um zu überprüfen, ob diese Komponenten signiert sind:
EXEC sp_fulltext_service 'verify_signature';
Qualität
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. Auf diese Weise wird die Genauigkeit von Rückrufen erhöht.
Für eine Vielzahl von Sprachen ist die Wörtertrennung standardmäßig in SQL Server enthalten und aktiviert.
Eine Liste der Sprachen, für die SQL Server eine Wörtertrennung und Wortstammerkennung enthält, finden Sie unter sys.fulltext_languages (Transact-SQL).
Verwenden des Namens der Spaltensprache durch die Volltextsuche
Beim Erstellen eines Volltextindex müssen Sie für jede Spalte einen gültigen Sprachennamen angeben. 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. Andernfalls verwendet die Volltextsuche die neutrale Wörtertrennung. Dieses Verhalten kann sich ggf. auf die Genauigkeit der Rückrufe auswirken. Es ist daher sehr zu empfehlen, dass Sie beim Erstellen eines Volltextindex für jede Spalte einen gültigen und verfügbaren Sprachennamen angeben.
Hinweis
Die LCID wird für alle Datentypen verwendet, die für die Volltextindizierung geeignet sind (z. B. char oder 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.
Worttrennung
Bei der Wörtertrennung wird der zu indizierende Text an den sprachspezifischen Wortgrenzen zerlegt. Aus diesem Grund unterscheidet sich das Wörtertrennungsverhalten für die einzelnen Sprachen. Wenn Sie eine Sprache „x“ verwenden, um mehrere Sprachen {x, y und z} zu indizieren, kann es ggf. zu unerwartetem Verhalten und Ergebnissen kommen. 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. Außerdem kann ggf. auch unerwartetes Verhalten bei der Wortstammerkennung auftreten, da ein Wort für verschiedene Sprachen unterschiedliche Stämme aufweisen kann. Im Englischen sind Wortgrenzen z. B. meist Leerzeichen oder Satzzeichen. In anderen Sprachen, z. B. Deutsch, können dabei Wörter oder Zeichen kombiniert werden. Daher sollte die gewählte Spaltensprache die Sprache sein, die voraussichtlich in den Zeilen der Spalte gespeichert wird.
Westliche Sprachen
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. Es kann z. B. sein, dass Sie englischen, spanischen und deutschen Text in einer Spalte speichern möchten. Diese drei westlichen Sprachen weisen sehr ähnliche Wörtertrennungsmuster auf, wobei die Muster von Deutsch am komplexesten sind. 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. 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.
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. Es können Ausnahmefälle auftreten, in denen die komplexeste Wörtertrennung Text, der in einer anderen Sprache geschrieben ist, nicht richtig verarbeiten kann.
Andere Sprachen als westliche Sprachen
Bei anderen Sprachen (wie Chinesisch, Japanisch, Hindi usw.) funktioniert die oben beschriebene Lösung aus linguistischen Gründen nicht immer. Für andere Sprachen als westliche Sprachen können Sie folgende Lösung in Betracht ziehen:
Sprachen unterschiedlicher Sprachgruppen
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. Dies würde es Ihnen ermöglichen, für jede Spalte die sprachspezifische Wörtertrennung zu verwenden. 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.
Für binären Inhalt (z. B. Microsoft Word-Dokumente)
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. In diesem Fall gibt der Filter bei der Indizierung die richtige LCID für ein Dokument oder einen Abschnitt eines Dokuments aus. Die Volltext-Engine ruft mit dieser LCID dann die Wörtertrennung für die Sprache auf. Nach dem Indizieren von mehrsprachigem Inhalt ist es jedoch ratsam, den Inhalt auf die richtige Indizierung zu überprüfen.
Nur-Text-Inhalt
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. Dazu müssen Sie vor der Volltextindizierung jedoch die Sprache kennen.
Wortstammerkennung
Ein weiterer Aspekt, den Sie beim Wählen der Spaltensprache berücksichtigen sollten, ist die Wortstammerkennung. AlsWortstammerkennung wird bei Volltextabfragen die Suche nach allen Flexionsformen eines Worts in einer bestimmten Sprache bezeichnet. 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. Die Wortstammerkennung für Deutsch funktioniert beispielsweise nicht für Englisch oder Spanisch usw. Dies kann sich je nach Sprache, die Sie zur Abfragezeit auswählen, auf Rückrufvorgänge auswirken.
Auswirkung des Spaltentyps auf Volltextsuche
Ein weiterer Aspekt bei der Wahl der Sprache ist die Art und Weise, wie die Daten dargestellt werden. Für Daten, die nicht in varbinary(max) -Spalten gespeichert sind, erfolgt keine spezielle Filterung. Stattdessen durchläuft der Text die Worteinheitenerkennungs-Komponente i. A. unverändert.
Die Wörtertrennung ist außerdem hauptsächlich für die Verarbeitung von geschriebenem Text konzipiert. Für Text mit speziellen Auszeichnungen (wie z. B. HTML) wird möglicherweise keine große linguistische Genauigkeit bei der Indizierung und Suche erreicht. 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. 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.
Hinweis
Eine sprachbasierte Wortstammerkennung ist nicht möglich, wenn Sie die neutrale Sprache angeben.
Angeben einer nicht standardmäßigen Spaltensprache in einer Volltextabfrage
In SQL Server analysiert 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. Um dieses Verhalten zu überschreiben, geben Sie zur Abfragezeit eine nicht standardmäßige Sprache an. 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.
Weitere Informationen
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Datentypen (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
Konfigurieren und Verwalten von Filtern für die Suche
sp_fulltext_service (Transact-SQL)
sys.fulltext_languages (Transact-SQL)
Konfigurieren und Verwalten von Wörtertrennungen und Wortstammerkennungen für die Suche