Freigeben über


Verwenden Sie die Full-Text-Suche mit XML-Spalten

Sie können einen Volltextindex für XML-Spalten erstellen, die den Inhalt der XML-Werte indiziert, aber das XML-Markup ignoriert. Elementtags werden als Tokengrenzen verwendet. Die folgenden Elemente sind indexiert:

  • Der Inhalt von XML-Elementen.

  • Der Inhalt von XML-Attributen des Elements der obersten Ebene, es sei denn, diese Werte sind numerische Werte.

Wenn möglich, können Sie die Volltextsuche mit dem XML-Index auf folgende Weise kombinieren:

  1. Filtern Sie zunächst die XML-Werte von Interesse mithilfe der SQL-Volltextsuche.

  2. Fragen Sie als Nächstes die XML-Werte ab, die einen XML-Index in der XML-Spalte verwenden.

Beispiel: Kombinieren der Volltextsuche mit XML-Abfrage

Nachdem der Volltextindex in der 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 zu unterzuordnen, die das Wort "custom" an einer beliebigen Stelle im Dokument enthalten. Die exist()- Klausel stellt sicher, dass das Wort "custom" im Titel eines Buchs auftritt.

Eine Volltextsuche, die contains() und XQuery contains() verwendet , weist unterschiedliche Semantik auf. Letzteres ist eine Teilzeichenfolgenübereinstimmung, und der erste ist eine Tokenübereinstimmung, die Stemming verwendet. Wenn die Suche daher nach einer Zeichenfolge ist, die "run" im Titel enthält, umfasst die Treffer "run", "runs" und "running", da sowohl die Volltext contains()-Abfrage als auch die Xquery contains()-Abfrage erfüllt sind. Die Abfrage stimmt jedoch nicht mit dem Wort "anpassbar" im Titel überein, weil der Volltext enthält() fehlschlägt, aber die Xquery contains() erfüllt wird. Im Allgemeinen sollte die Volltext-Contains() -Klausel für eine reine Teilzeichenfolgenüberstimmung entfernt werden.

Darüber hinaus verwendet die Volltextsuche Wortstammerkennung, aber XQuery contains() ist eine Literal-Übereinstimmung. Dieser Unterschied wird im nächsten Beispiel veranschaulicht.

Beispiel: Volltextsuche für XML-Werte mithilfe von Stemming

Die XQuery contains()- Überprüfung, die im vorherigen Beispiel ausgeführt wurde, kann im Allgemeinen nicht entfernt werden. Angenommen, die folgende Abfrage wird ausgeführt:

SELECT *   
FROM   T   
WHERE  CONTAINS(xCol,'run')   

Das Wort "ran" im Dokument stimmt aufgrund der Wortstammerkennung mit der Suchbedingung überein. Darüber hinaus wird der Suchkontext nicht mithilfe von XQuery überprüft.

Wenn XML in relationale Spalten mithilfe von AXSD kompiliert wird, die Volltext indiziert sind, führen XPath-Abfragen, die über die XML-Ansicht auftreten, keine Volltextsuche für die zugrunde liegenden Tabellen durch.

Siehe auch

XML-Indizes (SQL Server)