Begrenzen von Resultsets mit Rang (Volltextsuche)
Die CONTAINSTABLE-Funktion und die FREETEXTTABLE-Funktion geben eine Spalte mit dem Namen RANK zurück, die Ordinalwerte zwischen 0 und 1000 (Rangwerte) enthält. Diese Werte werden verwendet, um die Rangfolge der zurückgegebenen Zeilen gemäß ihrer Übereinstimmung mit den Auswahlkriterien festzulegen. Die Rangwerte geben lediglich eine relative Relevanzreihenfolge der Zeilen im Resultset an, wobei ein niedrigerer Wert eine niedrigere Relevanz anzeigt. Die tatsächlichen Werte sind nicht von Bedeutung und unterscheiden sich i. d. R. bei jeder Ausführung der Abfrage.
Hinweis |
---|
Die CONTAINS- und FREETEXT-Prädikate geben keine Rangwerte zurück. |
Die Anzahl der Elemente, die eine Suchbedingung erfüllen, ist oft sehr groß. Damit CONTAINSTABLE- und FREETEXTTABLE-Abfragen nicht zu viele Ergebnisse zurückliefern, können Sie den optionalen top_n_by_rank-Parameter verwenden, mit dem nur eine Teilmenge der Zeilen zurückgegeben wird. top_n_by_rank ist ein Ganzzahlwert (n), mit dem festgelegt wird, dass nur n Ergebnisse mit dem höchsten Rang in absteigender Reihenfolge zurückgegeben werden sollen. Wenn top_n_by_rank mit anderen Parametern kombiniert wird, werden von der Abfrage möglicherweise weniger Zeilen zurückgegeben als die Anzahl Zeilen, die mit allen Prädikaten übereinstimmen.
SQL Server ordnet die Übereinstimmungen nach Rang und gibt nur die angegebene Anzahl Zeilen zurück. Diese Einschränkung kann zu einer deutlichen Leistungssteigerung führen. So wird z. B. eine Abfrage, die normalerweise 100.000 Zeilen aus einer Tabelle mit 1 Million Zeilen zurückgeben würde, bedeutend schneller verarbeitet, wenn nur die obersten 100 Zeilen angefordert werden.
Hinweis |
---|
Informationen dazu, wie die Rangwerte bei der Volltextsuche generiert werden, finden Sie unter Berechnung des Rangs bei Suchabfrageergebnissen (Volltextsuche). |
Beispiel
Beispiel A: Suchen nach ausschließlich den obersten drei Übereinstimmungen
Im folgenden Beispiel werden mit CONTAINSTABLE nur die obersten drei Übereinstimmungen zurückgegeben.
USE Northwind;
GO
SELECT K.RANK, CompanyName, ContactName, Address
FROM Customers AS C
INNER JOIN
CONTAINSTABLE(Customers,Address, 'ISABOUT ("des*",
Rue WEIGHT(0.5),
Bouchers WEIGHT(0.9))', 3) AS K
ON C.CustomerID = K.[KEY];
GO
Dies ist das Resultset.
RANK CompanyName ContactName address
---- ------------ ----------- -------
123 Bon app' Laurence Lebihan 12, rue des Bouchers
65 Du monde entier Janine Labrune 67, rue des Cinquante Otages
15 France restauration Carine Schmitt 54, rue Royale
Beispiel B: Suchen nach ausschließlich den obersten zehn Übereinstimmungen
In diesem Beispiel wird mit CONTAINSTABLE die Beschreibung und der Kategoriename der obersten zehn Essenskategorien zurückgegeben, die in der Description-Spalte die Wörter "sweet and savory" neben "sauces" oder "candies" beinhalten.
SELECT FT_TBL.Description,
FT_TBL.CategoryName,
KEY_TBL.RANK
FROM Categories AS FT_TBL INNER JOIN
CONTAINSTABLE (Categories, Description,
'("sweet and savory" NEAR sauces) OR
("sweet and savory" NEAR candies)'
, 10
) AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
In diesem Abschnitt
- Berechnung des Rangs bei Suchabfrageergebnissen (Volltextsuche)
Beschreibt, wie die Volltextsuche Rangwerte für die bei einer Abfrage zurückgegebenen Ergebnisse generiert. Behandelt werden häufig verwendete Begriffe und statistische Werte für die Berechnung von Rangwerten, wesentliche Faktoren bei der Berechnung des Rangs sowie die spezifische Rangberechnung für Ergebnisse der CONTAINSTABLE-Funktion und der FREETEXTTABLE-Funktion.