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.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Sie können einen Volltextindex für XML-Spalten erstellen, bei dem der Inhalt der XML-Werte indiziert, das XML-Markup jedoch ignoriert wird. Elementtags werden als Tokenbegrenzungen verwendet. Folgende Elemente werden indiziert:
Der Inhalt von XML-Elementen.
Nur der Inhalt von XML-Attributen des Elements der obersten Ebene, außer wenn diese Werte numerische Werte sind.
Gegebenenfalls können Sie die Volltextsuche mit dem XML-Index auf folgende Weise kombinieren:
Filtern Sie zuerst die XML-Werte von Interesse mithilfe der SQL-Volltextsuche.
Fragen Sie als Nächstes solche XML-Werte ab, die den XML-Index für die XML-Spalte verwenden.
Beispiel: Kombinieren der Volltextsuche mit einer XML-Abfrage
Nachdem der Volltextindex für die XML-Spalte erstellt wurde, überprüft die folgende Abfrage, ob ein XML-Wert das Wort "custom" im Titel eines Buchs enthält:
SELECT *
FROM T
WHERE CONTAINS(xCol,'custom')
AND xCol.exist('/book/title/text()[contains(.,"custom")]') = 1;
Die contains()-Methode verwendet den Volltextindex, um die XML-Werte, die das Wort „custom“ irgendwo im Dokument enthalten, zu einer Teilmenge zusammenzufassen. Die exist()-Klausel stellt sicher, dass das Wort „custom“ im Titel eines Buchs vorkommt.
Eine Volltextsuche mit der contains()-Klausel und XQuery mithilfe der contains()-Klausel weisen unterschiedliche Semantiken auf. Letzteres ist eine Teilstringübereinstimmung, und Ersteres ist eine Tokenübereinstimmung, die Stemming verwendet. Daher umfassen die Übereinstimmungen, wenn nach der Zeichenfolge gesucht wird, die im Titel „run“ enthält, „run“, „runs“ und „running“, weil sowohl die Volltextklausel contains() als auch die XQuery-Klausel contains() erfüllt sind. Allerdings entspricht die Abfrage nicht dem Wort „customizable“ im Titel, weil die Volltextsuche contains() fehlschlägt, die XQuery-Klausel contains() jedoch erfüllt ist. Im Allgemeinen sollte für eine reine Teilzeichenfolgenübereinstimmung die Volltextklausel contains() entfernt werden.
Außerdem verwendet die Volltextsuche die Wortstammerkennung, während XQuery contains() eine exakte Zeichenfolgenübereinstimmung ist. Dieser Unterschied wird im folgenden Beispiel veranschaulicht.
Beispiel: Volltextsuche in XML-Werten mit Stemming
Die XQuery contains()-Überprüfung, die im vorherigen Beispiel durchgeführt wurde, kann im Allgemeinen nicht eliminiert werden. Betrachten Sie die folgende Abfrage:
SELECT *
FROM T
WHERE CONTAINS(xCol,'run');
Das Wort "ran" im Dokument entspricht aufgrund von Stemming der Suchbedingung. Außerdem wird der Suchkontext nicht mithilfe von XQuery überprüft.
Wenn XML in relationale Spalten zerlegt wird, indem volltextindizierte AXSD verwendet wird, führen XPath-Abfragen, die für die XML-Sicht ausgeführt werden, keine Volltextsuche der zugrunde liegenden Tabellen durch.