FREETEXT (Transact-SQL)
Data aggiornamento: 14 aprile 2006
Predicato utilizzato per eseguire una ricerca su colonne che contengono tipi di dati carattere per valori corrispondenti al significato e non all'esatta formulazione del testo nelle condizioni di ricerca. Se si utilizza FREETEXT, il motore delle query full-text esegue internamente le azioni in freetext_string di seguito elencate, assegna un peso a ogni termine, quindi cerca le corrispondenze.
- Separazione della stringa in singole parole in base ai delimitatori di parola (word breaking).
- Generazione di forme flessive delle parole (stemming).
- Identificazione di una lista di espansioni o sostituzioni dei termini in base alle corrispondenze nel thesaurus.
Convenzioni della sintassi Transact-SQL
Sintassi
FREETEXT ( { column_name | (column_list) | * }
, 'freetext_string' [ , LANGUAGE language_term ] )
Argomenti
- column_name
Nome della colonna registrata per la ricerca full-text. 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. A meno che non venga specificato language_term, la lingua di tutte le colonne in column_list deve essere uguale.
- *
Specifica che la ricerca della stringa specificata in freetext_string deve essere eseguita in tutte le colonne registrate per la ricerca full-text. Se nella clausola FROM sono specificate più tabelle, è necessario qualificare il simbolo * con il nome della tabella. A meno che non venga specificato language_term, la lingua di tutte le colonne della tabella deve essere uguale.
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.freetext_string è di tipo nvarchar. Si verifica una conversione implicita quando un diverso tipo di dati character viene utilizzato come input. Nell'esempio seguente la variabile
@SearchWord
, definita comevarchar(30)
, causa una conversione implicita nel predicatoFREETEXT
.USE AdventureWorks; GO DECLARE @SearchWord varchar(30) SET @SearchWord ='performance' SELECT Description FROM Production.ProductDescription WHERE FREETEXT(Description, @SearchWord);
Poiché non è possibile utilizzare lo sniffing dei parametri nella conversione, utilizzare nvarchar per migliorare le prestazioni. Nell'esempio dichiarare
@SearchWord
comenvarchar(30)
.USE AdventureWorks; GO DECLARE @SearchWord nvarchar(30) SET @SearchWord = N'performance' SELECT Description FROM Production.ProductDescription WHERE FREETEXT(Description, @SearchWord);
È inoltre possibile utilizzare l'hint per la query OPTIMIZE FOR nei casi in cui venga generato un piano non ottimale.
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 FREETEXT. 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 oppure non vi sono risorse installate corrispondenti a tale lingua, Microsoft SQL Server restituisce un errore. Per utilizzare le risorse della lingua neutra, specificare 0x0 per language_term.
Osservazioni
Le query full-text che utilizzano il predicato FREETEXT sono meno precise delle query che utilizzano il predicato CONTAINS. Il motore di ricerca full-text di SQL Server identifica le parole e le frasi importanti. Alle parole chiave riservate e ai caratteri jolly che hanno generalmente significato nel parametro <contains_search_condition> del predicato CONTAINS non viene associato alcun significato speciale.
FREETEXT non viene riconosciuta come parola chiave se il livello di compatibilità è inferiore a 70. Per ulteriori informazioni, vedere sp_dbcmptlevel (Transact-SQL).
Esempi
A. Utilizzo di FREETEXT per la ricerca di parole contenenti valori di carattere specificati
Nell'esempio seguente viene eseguita la ricerca di tutti i documenti contenenti le parole associate a "vital", "safety" e "components".
USE AdventureWorks;
GO
SELECT Title
FROM Production.Document
WHERE FREETEXT (Document, 'vital safety components' );
GO
B. Utilizzo di FREETEXT con variabili
Nell'esempio seguente viene utilizzata una variabile anziché un termine di ricerca specifico.
USE AdventureWorks;
GO
DECLARE @SearchWord nvarchar(30);
SET @SearchWord = N'high-performance';
SELECT Description
FROM Production.ProductDescription
WHERE FREETEXT(Description, @SearchWord);
GO
Vedere anche
Riferimento
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Tipi di dati (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
WHERE (Transact-SQL)
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
14 aprile 2006 |
|