Freigeben über


Auswählen einer Sprache beim Erstellen eines Volltextindexes

Gilt für:SQL ServerAzure SQL-Datenbank

Wenn Sie einen Volltextindex erstellen, müssen Sie für die indizierte Spalte eine Spaltensprache angeben. Die Worttrennung und Die Wortstammzeichen der angegebenen Sprache werden von Volltextabfragen in der Spalte verwendet. Bei der Wahl der Spaltensprache für die Erstellung eines Volltextindex sind mehrere Dinge zu bedenken. Diese Überlegungen beziehen sich auf die Tokenisierung des Texts und dann indiziert nach dem Full-Text Modul.

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 und ALTER FULLTEXT INDEX.

Dieser Abschnitt enthält eine Einführung in Worttrennungen und Wortstammerkennungen und erläutert, wie Full-Text Suche die Sprachcode-ID (LCID) der Sprache auf Spaltenebene verwendet.

Einführung in Worttrennungen und Wortstammerkennungen

SQL Server enthält eine vollständige Familie von Worttrennungen und Wortstammerkennungen. Die Microsoft Natural Language Group (NLG) implementiert und unterstützt diese sprachlichen Komponenten.

Die Worttrennung bietet die folgenden Vorteile:

  • Stabilität

    Tests zeigen, dass die Worttrennungen in Hochdruck-Abfrageumgebungen robust sind.

  • Sicherheit

    Die Worttrennungen sind in SQL Server standardmäßig aktiviert. 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:

    EXECUTE sp_fulltext_service 'verify_signature';
    
  • Qualität

    Interne Tests zeigen, dass die Worttrennungen eine bessere semantische Qualität als vorherige Worttrennungen bieten. 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 einen Worttrennungs- und Wortstamm enthält, finden Sie unter sys.fulltext_languages.

Wie Full-Text Suche den Namen der Sprache auf Spaltenebene verwendet

Beim Erstellen eines Volltextindex müssen Sie für jede Spalte einen gültigen Sprachennamen angeben. Wenn ein Sprachname gültig ist, aber nicht von der sys.fulltext_languages Katalogansicht zurückgegeben wird, greift Full-Text Suche bei Bedarf auf den nächstgelegenen verfügbaren Sprachnamen derselben Sprachfamilie zurück. Andernfalls greift Full-Text Search auf den Neutral-Worttrenner zurück. 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 verwenden, xum mehrere Sprachen {x, und y}zu indizieren, zkann ein Teil des Verhaltens zu unerwarteten Ergebnissen führen. Beispielsweise kann es sich bei einem Gedankenstrich (-) oder einem Komma (,) um ein Worttrennungselement handeln, das in einer Sprache, aber nicht in einer anderen Sprache ausgelöst 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, wörter oder Zeichen können zusammen kombiniert werden. Daher sollte die von Ihnen ausgewählte Sprache auf Spaltenebene die Sprache darstellen, die Sie in Zeilen dieser Spalte speichern möchten.

Westliche Sprachen

Wenn Sie für die westliche Sprachenfamilie nicht sicher sind, welche Sprachen in einer Spalte gespeichert werden sollen, oder sie erwarten, dass mehrere sprachen gespeichert werden, besteht eine allgemeine Problemumgehung darin, den Wortumbruch für die komplexeste Sprache zu verwenden, die 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 ähnliche Wortbruchmuster, wobei die deutschen Muster die 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.

Die Verwendung der Worttrennung der komplexesten Sprache in einer Sprachfamilie garantiert nicht die perfekte Indizierung jeder Sprache in der Familie. Eckfälle können vorhanden sein, in denen der komplexeste Worttrennung Text, der in einer anderen Sprache geschrieben wurde, nicht ordnungsgemäß verarbeiten kann.

Nicht westliche Sprachen

Bei nicht westlichen Sprachen (z. B. Chinesisch, Japanisch, Hindi usw.) funktioniert die vorherige Problemumgehung aus sprachlichen Gründen nicht unbedingt. 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. Diese Trennung würde es Ihnen ermöglichen, die sprachspezifische Worttrennung für jede Spalte 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 vom binären Typ ist, berücksichtigt der Full-Text Suchfilter, der den Textinhalt verarbeitet, bevor er an den Worttrennungsvorgang gesendet wird, bestimmte Sprachtags, die in der Binärdatei vorhanden sind. In diesem Fall gibt der Filter zur Indizierungszeit die rechte LCID für ein Dokument oder einen Abschnitt eines Dokuments aus. Die Volltext-Engine ruft dann den Worttrennungsmechanismus für die Sprache mit dieser LCID 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

Eine weitere Überlegung bei der Auswahl der Sprache auf Spaltenebene ist die Wortstammerkennung. Die Wortstammerkennung in Volltextabfragen ist der Prozess der Suche nach allen wortstammigen (flectionalen) Formen eines Worts in einer bestimmten Sprache. 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. Beispielsweise funktionieren deutsche Stemmer nicht für Englisch oder Spanisch (und so weiter). Dies kann sich je nach Sprache, die Sie zur Abfragezeit auswählen, auf Rückrufvorgänge auswirken.

Ein weiterer Aspekt bei der Wahl der Sprache ist die Art und Weise, wie die Daten dargestellt werden. Für Daten, die nicht in einer varbinary(max) -Spalte gespeichert sind, wird keine spezielle Filterung ausgeführt. 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. Wenn Sie also über eine Art von Markup (z. B. HTML) für Ihren Text verfügen, erhalten Sie möglicherweise während der Indizierung und Suche keine große linguistische Genauigkeit. In diesem Fall haben Sie zwei Auswahlmöglichkeiten: Die bevorzugte Methode besteht darin, die Textdaten einfach in einer 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 Sprache auf Spaltenebene in einer Volltextabfrage

In SQL Server analysiert Full-Text Search standardmäßig die Abfragebegriffe mithilfe der für jede Spalte angegebenen Sprache, die in der Volltextklausel enthalten ist. Um dieses Verhalten zu überschreiben, 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-, FREETEXTTABLE- oder FREETEXTTABLE-Abfrage verwendet werden, um die Sprache anzugeben, die für Worttrennung, Wortstammerkennung, Thesaurus und Stopwordverarbeitung der Abfragebegriffe verwendet wird.