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
- Classificazione per pertinenza dei risultati delle query di ricerca (ricerca full-text)
Viene illustrato il modo in cui la ricerca full-text genera i valori di pertinenza restituiti da una query, inclusi i termini di uso comune e i valori statistici importanti per il calcolo della pertinenza, i problemi relativi a tale calcolo e la classificazione per pertinenza dei risultati delle funzioni CONTAINSTABLE e FREETEXTTABLE.