Share via


Limitazione dei set di risultati classificati per pertinenza (ricerca full-text)

Le funzioni CONTAINSTABLE e FREETEXTTABLE restituiscono una colonna denominata RANK che contiene valori ordinali compresi tra 0 e 1000 (valori di pertinenza). Questi valori vengono utilizzati per classificare le righe restituite in base al grado di corrispondenza con i criteri di selezione. I valori di pertinenza indicano solo un ordine relativo di pertinenza delle righe nel set di risultati, dove un valore inferiore indica una pertinenza inferiore. I valori effettivi sono senza importanza e in genere variano ogni volta che viene eseguita la query.

[!NOTA]

I predicati CONTAINS e FREETEXT non restituiscono alcun valore di pertinenza.

Il numero di elementi corrispondenti a una condizione di ricerca è spesso molto elevato. Per impedire che query CONTAINSTABLE o FREETEXTTABLE restituiscano un numero troppo elevato di corrispondenze, utilizzare il parametro top_n_by_rank facoltativo per restituire solo un subset di righe. top_n_by_rank è un valore integer, n, che specifica che solo le n corrispondenze con pertinenza più elevata devono essere restituite, in ordine decrescente. Se top_n_by_rank viene combinato con altri parametri, la query potrebbe restituire un numero inferiore di righe rispetto al numero di righe effettivamente corrispondenti a tutti i predicati.

In SQL Server le corrispondenze vengono classificate per pertinenza e viene restituito solo il numero specificato di righe. Questa opzione può comportare un miglioramento significativo delle prestazioni. Una query che normalmente restituisce 100.000 righe di una tabella che contiene un milione di righe, ad esempio, viene elaborata più rapidamente se vengono richieste solo le prime 100 righe.

[!NOTA]

Per informazioni sulla generazione dei valori di pertinenza da parte della ricerca full-text, vedere Classificazione per pertinenza dei risultati delle query di ricerca (ricerca full-text).

Esempio

Esempio A: Ricerca delle prime tre corrispondenze

Nell'esempio seguente viene utilizzato CONTAINSTABLE per restituire solo le prime tre corrispondenze.

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

Set di risultati:

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     

Esempio B: Ricerca delle prime dieci corrispondenze

Nell'esempio seguente viene utilizzato CONTAINSTABLE per restituire la descrizione e il nome di categoria delle prime 10 categorie di prodotti alimentari per cui la colonna Description include le parole "sweet and savory" accanto alla parola "sauces" o "candies".

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

Contenuto della sezione