FREETEXTTABLE (Transact-SQL)
Data aggiornamento: 17 luglio 2006
Restituisce una tabella con una o più righe oppure nessuna riga per le colonne contenenti dati di tipo carattere per i valori che corrispondono al significato, ma non all'esatta formulazione, del testo specificato in freetext_string. È possibile fare riferimento a FREETEXTTABLE nella clausola FROM di un'istruzione SELECT come a un normale nome di tabella.
Le query che utilizzano FREETEXTTABLE specificano query full-text di tipo freetext che restituiscono una classificazione della pertinenza (RANK) e una chiave full-text (KEY) per ogni riga.
Convenzioni della sintassi Transact-SQL
Sintassi
FREETEXTTABLE (table , { column_name | (column_list) | * }
, 'freetext_string'
[ ,LANGUAGE language_term ]
[ ,top_n_by_rank ] )
Argomenti
table
Nome della tabella contrassegnata per query full-text. table o viewpuò essere un nome di oggetto di database a una, due o tre parti. L'esecuzione della ricerca in una vista può interessare solo una tabella di base con indicizzazione full-text.Per ulteriori informazioni, vedere Convenzioni della sintassi Transact-SQL (Transact-SQL).
table non può includere un nome di server e non può essere utilizzato per l'esecuzione di query su server collegati.
- column_name
Nome della colonna da includere nella ricerca appartenente a table. Le colonne valide per la ricerca full-text sono le colonne di tipo char, varchar, nchar, nvarchar, text, ntext, image, xml e varbinary(max).
- column_list
Indica che è possibile specificare più colonne, separate da virgola. column_list deve essere racchiuso tra parentesi. Se non si specifica language_term, la lingua di tutte le colonne in column_list deve essere la stessa.
- *
Specifica che la ricerca della stringa specificata in freetext_string deve essere eseguita in tutte le colonne registrate per la ricerca full-text. Se non si specifica language_term, la lingua di tutte le colonne con indicizzazione full-text della tabella deve essere la stessa.
freetext_string
Testo da cercare nella colonna specificata in column_name. È possibile specificare qualsiasi testo, comprese parole e frasi. Vengono generate corrispondenze se nell'indice full-text viene trovato un termine o vengono trovate le forme di un termine.A differenza di quanto avviene nella condizione di ricerca CONTAINS dove AND è una parola chiave, se utilizzata in freetext_string la parola "and" viene considerata una parola non significativa e viene ignorata.
Non è consentito utilizzare WEIGHT, FORMSOF, caratteri jolly, NEAR e altra sintassi. La stringa specificata in freetext_string viene sottoposta alla sillabazione, all'analisi morfologica e al thesaurus. Se freetext_string è racchiusa tra virgolette doppie, viene cercata una frase corrispondente. Il testo non viene sottoposto alla sillabazione e al thesaurus.
LANGUAGE language_term
Lingua di cui verranno utilizzate le risorse per l'esecuzione del wordbreaking, dello stemming e del thesaurus e per la rimozione delle parole non significative nell'ambito della query FREETEXTTABLE. Questo parametro è facoltativo ed è possibile specificare un valore stringa, un valore integer o un valore esadecimale corrispondente all'identificatore delle impostazioni internazionali (LCID) di una lingua. Se si specifica language_term, la lingua rappresentata dall'argomento verrà applicata a tutti gli elementi della condizione di ricerca. Se non si specifica alcun valore, verrà utilizzata la lingua per la ricerca full-text della colonna.Se l'argomento language_term viene specificato come stringa, corrisponde al valore della colonna alias nella tabella di sistema syslanguages. La stringa deve essere racchiusa tra virgolette singole, come in 'language_term'. Se l'argomento language_term viene specificato come valore integer, corrisponde all'effettivo LCID che identifica la lingua. Se si specifica un valore esadecimale, language_term è 0x seguito dal valore esadecimale di LCID. Il valore esadecimale non deve superare le otto cifre, inclusi gli zero iniziali.
Se il valore è in formato DBCS (Double-Byte Character Set), verrà convertito in Unicode da Microsoft SQL Server.
Se la lingua specificata non è valida o non vi sono risorse installate corrispondenti a tale lingua, SQL Server restituisce un errore. Per utilizzare le risorse della lingua neutra, specificare 0x0 per language_term.
top_n_by_rank
Quando si specifica un valore integer, n, FREETEXTTABLE restituisce solo le prime n corrispondenze, ordinate in base alla pertinenza.Se oltre al predicato FREETEXTTABLE viene applicato un filtro, tale filtro viene applicato alle prime n righe e viene restituito un numero di righe inferiore a quello specificato in top_n_by_rank. L'attivazione dell'opzione precompute rank nella stored procedure sp_configure può produrre un miglioramento delle prestazioni delle query FREETEXTTABLE che utilizzano il parametro top_n_by_rank. Per ulteriori informazioni, vedere sp_configure (Transact-SQL) e sp_fulltext_service (Transact-SQL).
Osservazioni
La funzione FREETEXTTABLE utilizza le stesse condizioni di ricerca del predicato FREETEXT.
Come per CONTAINSTABLE, la tabella restituita include le colonne KEY e RANK, a cui viene fatto riferimento nella query per ottenere le righe appropriate e utilizzare i valori di pertinenza della riga.
FREETEXTTABLE non viene riconosciuta come parola chiave se il livello di compatibilità è inferiore a 70. Per ulteriori informazioni, vedere sp_dbcmptlevel (Transact-SQL).
Autorizzazioni
La funzione FREETEXTTABLE può essere richiamata soltanto dagli utenti che dispongono delle autorizzazioni SELECT appropriate per la tabella specificata o per le colonne della tabella a cui viene fatto riferimento.
Esempi
Nell'esempio seguente vengono restituiti il nome e la descrizione di tutte le categorie correlate al termine sweet
, candy
, bread
, dry
o meat
.
[!NOTA] Per eseguire questo esempio, è necessario installare il database Northwind. Per informazioni sulle procedure di installazione del database Northwind, vedere Download dei database di esempio Northwind e pubs.
USE Northwind;
SELECT FT_TBL.CategoryName
,FT_TBL.Description
,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL
INNER JOIN FREETEXTTABLE(dbo.Categories, Description,
'sweetest candy bread and dry meat') AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
Nell'esempio seguente, identico al precedente, viene illustrato l'utilizzo dei parametri LANGUAGE
language_term e top_n_by_rank .
USE Northwind;
SELECT FT_TBL.CategoryName
,FT_TBL.Description
,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL
INNER JOIN FREETEXTTABLE(dbo.Categories, Description,
'sweetest candy bread and dry meat',LANGUAGE 'English',2)
AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
[!NOTA] Non è necessario che per il parametro LANGUAGE language_term venga utilizzato il parametro top_n_by_rank .
Cronologia modifiche
Versione | Cronologia |
---|---|
17 luglio 2006 |
|
Vedere anche
Riferimento
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
Funzioni per i set di righe (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
Altre risorse
Esecuzione di query su SQL Server tramite la ricerca full-text
Opzione precompute rank