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.

HinweisHinweis

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.

HinweisHinweis

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.