Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Beim Erstellen eines Volltextindex müssen Sie eine Sprache auf Spaltenebene für die indizierte Spalte angeben. Der Worttrennungs- und Wortstamm der angegebenen Sprache wird von Volltextabfragen in der Spalte verwendet. Bei der Auswahl der Spaltensprache beim Erstellen eines Volltextindexes sind einige Dinge zu berücksichtigen. Diese Überlegungen beziehen sich auf die Tokenisierung ihres Texts und werden dann von Full-Text Engine indiziert.
Hinweis
Wenn Sie eine Sprache auf Spaltenebene für eine Spalte mit Volltextindex angeben möchten, verwenden Sie die LANGUAGE language_term-Klausel , wenn Sie die Spalte angeben. Weitere Informationen finden Sie unter CREATE FULLTEXT INDEX (Transact-SQL) und ALTER FULLTEXT INDEX (Transact-SQL).
Sprachunterstützung in der Full-Text-Suche
Dieser Abschnitt enthält eine Einführung in Worttrenner und Stemming und erläutert, wie die Volltextsuche die LCID der spaltenbezogenen Sprache verwendet.
Einführung in Worttrenner und Stemmer
SQL Server 2008 und höhere Versionen enthalten eine komplett neue Familie von Worttrennern und Stemming-Algorithmen, die wesentlich besser sind als die zuvor in SQL Server verfügbaren Worttrenner und Stemming-Algorithmen.
Hinweis
Die Microsoft Natural Language Group (MS NLG) implementiert und unterstützt diese neuen sprachlichen Komponenten.
Die neuen Worttrenner bieten die folgenden Vorteile:
Robustheit
Tests haben gezeigt, dass die neuen Worttrennungen in Hochdruck-Abfrageumgebungen robust sind.
Sicherheit
Die neuen Worttrennungen sind standardmäßig in SQL Server dank Sicherheitsverbesserungen in linguistischen Komponenten aktiviert. Es wird dringend empfohlen, dass externe Komponenten wie Wörtertrennungen und Filter signiert werden, um die allgemeine Sicherheit und Robustheit von SQL Server zu verbessern. Sie können Volltext konfigurieren, um zu überprüfen, ob diese Komponenten wie folgt signiert sind:
EXEC sp_fulltext_service 'verify_signature';Qualität
Word-Breaker wurden neu gestaltet, und Tests haben gezeigt, dass die neuen Worttrennungen eine bessere semantische Qualität als vorherige Worttrennungen bieten. Dadurch wird die Rückrufgenauigkeit erhöht.
Abdeckung für eine umfangreiche Liste von Sprachen, Worttrennungen sind standardmäßig in SQL Server enthalten und standardmäßig aktiviert.
Eine Liste der Sprachen, für die SQL Server einen Worttrennungs- und Wortstamm enthält, finden Sie unter sys.fulltext_languages (Transact-SQL).
Wie Full-Text Suche den Namen der Column-Level Sprache verwendet
Beim Erstellen eines Volltextindex müssen Sie einen gültigen Sprachnamen für jede Spalte angeben. Wenn ein Sprachname gültig ist, aber nicht von der sys.fulltext_languages (Transact-SQL) Katalogansicht zurückgegeben wird, greift die Volltextsuche ggf. auf den nächstgelegenen verfügbaren Sprachnamen der gleichen Sprachfamilie zurück. Andernfalls greift die Volltextsuche auf den Neutral-Worttrennzeichen zurück. Dieses Fallbackverhalten kann sich auf die Rückrufgenauigkeit auswirken. Daher wird dringend empfohlen, beim Erstellen eines Volltextindexes einen gültigen und verfügbaren Sprachnamen für jede Spalte anzugeben.
Hinweis
Die LCID wird für alle Datentypen verwendet, die für die Volltextindizierung geeignet sind (z. B. char oder nchar). Wenn die Sortierreihenfolge einer char, varchar oder text-Typ-Spalte auf eine Sprache eingestellt ist, die von der LCID abweicht, wird die LCID dennoch während der Volltextindizierung und Abfrage dieser Spalten verwendet.
Worttrennung
Ein Worttrennungstoken tokenisiert den Text, der auf Wortgrenzen indiziert wird, die sprachspezifisch sind. Daher unterscheidet sich das Wortbruchverhalten zwischen verschiedenen Sprachen. Wenn Sie eine Sprache (x) verwenden, um eine Reihe von Sprachen {x, y, und z} zu indizieren, kann ein Teil des Verhaltens unerwartete Ergebnisse verursachen. Beispielsweise kann es sich bei einem Gedankenstrich (-) oder einem Komma (,) um ein Worttrennungselement handeln, das in der einen Sprache verworfen, aber in der anderen beibehalten wird. Auch selten unerwartetes Wortstammverhalten kann auftreten, da ein bestimmtes Wort in unterschiedlicher Sprache unterschiedlich sein kann. In englischer Sprache sind Wörterbegrenzungen z. B. in der Regel Leerzeichen oder eine Form von Interpunktion. In anderen Sprachen, z. B. Deutsch, wörter oder Zeichen können zusammen kombiniert werden. Daher sollte die von Ihnen auf Spaltenebene gewählte Sprache die Sprache darstellen, die Sie erwarten, dass in den Zeilen dieser Spalte gespeichert wird.
Westliche Sprachen
Für die westliche Sprachfamilie, wenn Sie nicht sicher sind, welche Sprachen in einer Spalte gespeichert werden, oder Sie erwarten, dass mehrere Sprachen gespeichert werden, besteht eine allgemeine Problemumgehung darin, die Worttrennung für die komplexeste Sprache zu verwenden, die möglicherweise in der Spalte gespeichert werden kann. Sie können z. B. davon ausgehen, dass englischer, spanischer und deutscher Inhalt in einer einzelnen Spalte gespeichert wird. Diese drei westlichen Sprachen besitzen sehr ähnliche Wortbruchmuster, wobei die deutschen Muster die komplexesten sind. Daher wäre in diesem Fall eine gute Wahl die Verwendung eines deutschen Wortbrechers, der in der Lage sein sollte, englischen und spanischen Text korrekt zu verarbeiten. Im Gegensatz dazu kann der englische Worttrenner möglicherweise deutschen Text nicht perfekt verarbeiten, aufgrund der zusammengesetzten Wörter der deutschen Sprache.
Beachten Sie, dass die Verwendung der Worttrennung der komplexesten Sprache in einer Sprachfamilie keine perfekte Indizierung jeder Sprache in der Familie garantiert. Eckfälle können vorhanden sein, in denen der komplexeste Worttrennungsalgorithmus möglicherweise Text, der in einer anderen Sprache geschrieben ist, nicht ordnungsgemäß verarbeiten kann.
Nicht westliche Sprachen
Bei nicht westlichen Sprachen (z. B. Chinesisch, Japanisch, Hindi usw.) funktioniert die oben genannte Problemumgehung aus sprachlichen Gründen nicht unbedingt. Erwägen Sie bei nicht-westlichen Sprachen eine der folgenden Lösungen:
Für Sprachen aus verschiedenen Familien
Wenn eine Spalte dramatisch unterschiedliche Sprachen enthalten kann, z. B. Spanisch und Japanisch, sollten Sie den Inhalt verschiedener Sprachen in separaten Spalten speichern. Auf diese Weise können Sie die sprachspezifische Worttrennung für jede Spalte verwenden. Wenn Sie diese Lösung auswählen und die Abfragesprache zur Abfragezeit nicht kennen, müssen Sie möglicherweise die Abfrage für beide Spalten ausgeben, um sicherzustellen, dass die Abfrage die richtige Zeile oder das richtige Dokument findet.
Für Binäre Inhalte (z. B. Microsoft Word-Dokumente)
Wenn der indizierte Inhalt vom Typ
binaryist, berücksichtigt der Volltextsuchfilter, der den Textinhalt verarbeitet, bevor er an den Wörtertrenner gesendet wird, bestimmte Sprach-Tags, die in der Binärdatei vorhanden sind. In diesem Fall gibt der Filter zur Indizierungszeit die richtige LCID für ein Dokument oder einen Abschnitt eines Dokuments aus. Der Full-Text Engine wird dann den Worttrenner für die Sprache mit diesem LCID aufrufen. Nach der Indizierung von Inhalten mit mehreren Sprachen wird jedoch empfohlen, sicherzustellen, dass der Inhalt ordnungsgemäß indiziert wurde.Für Nur-Text-Inhalte
Wenn Der Inhalt Nur-Text ist, können Sie ihn in den
xmlDatentyp konvertieren und Sprachtags hinzufügen, die die Sprache angeben, die jedem bestimmten Dokument oder Dokumentabschnitt entspricht. Damit dies funktioniert, müssen Sie die Sprache jedoch vor der Volltextindizierung kennen.
Wortstammerkennung
Eine zusätzliche Überlegung bei der Auswahl der Sprache auf Spaltenebene ist das Stemming. Stemming in Volltextabfragen ist der Prozess des Suchens nach allen wortstammbezogenen (flektierenden) Formen eines Worts in einer bestimmten Sprache. Wenn Sie einen generischen Worttrenner zum Verarbeiten mehrerer Sprachen verwenden, funktioniert der Stammprozess nur für die für die Spalte angegebene Sprache, nicht für andere Sprachen in der Spalte. Beispielsweise funktionieren deutsche Stemmer nicht für Englisch oder Spanisch (usw.). Dies kann sich auf Ihren Rückruf auswirken, je nachdem, welche Sprache Sie zur Abfragezeit auswählen.
Einfluss des Spaltentyps auf die Full-Text-Suche
Eine weitere Überlegung bei der Sprachauswahl hängt davon ab, wie die Daten dargestellt werden. Für Daten, die nicht in varbinary(max) Spalte gespeichert sind, wird keine spezielle Filterung ausgeführt. Vielmehr wird der Text in der Regel durch die Worttrennungskomponente as-isübergeben.
Außerdem sind Worttrennungen hauptsächlich für die Verarbeitung von geschriebenen Text ausgelegt. Wenn Sie also über eine Art von Markup (z. B. HTML) für Ihren Text verfügen, erhalten Sie während der Indizierung und Suche möglicherweise keine große linguistische Genauigkeit. In diesem Fall haben Sie zwei Auswahlmöglichkeiten: Die bevorzugte Methode besteht darin, die Textdaten einfach in varbinary(max) Spalte zu speichern und den Dokumenttyp anzugeben, damit er gefiltert werden kann. Wenn dies keine Option ist, können Sie die Verwendung des neutralen Worttrennzeichens in Betracht ziehen und ggf. Markupdaten (z. B. "br" in HTML) zu Ihren Füllwortlisten hinzufügen.
Hinweis
Sprachbasierte Wortstammerkennung kommt nicht ins Spiel, wenn Sie die neutrale Sprache angeben.
Angeben einer nicht standardmäßigen Column-Level Sprache in einer Full-Text Abfrage
In SQL Server analysiert die Volltextsuche standardmäßig die Abfragebegriffe mithilfe der für jede Spalte angegebenen Sprache, die in der Volltextklausel enthalten ist. Um dieses Verhalten außer Kraft zu setzen, geben Sie zur Abfragezeit eine nicht standardmäßige Sprache an. Für unterstützte Sprachen, deren Ressourcen installiert sind, kann die LANGUAGE language_term-Klausel einer CONTAINS, CONTAINSTABLE, FREETEXT oder FREETEXTTABLE-Abfrage verwendet werden, um die Sprache anzugeben, die für Worttrennung, Wortstammerkennung, Thesaurus und Stopwordverarbeitung der Abfragebegriffe verwendet wird.
Siehe auch
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 Stemmers für die Suche