In SQL Server, la ricerca full-text consente a utenti e applicazioni di eseguire query full-text su dati di tipo carattere in tabelle di SQL Server. AffinchΓ© le query full-text possano essere eseguite in una determinata tabella, lβamministratore del database deve prima creare un indice full-text nella tabella in questione. Lβindice full-text include una o piΓΉ colonne basate su caratteri nella tabella. In queste colonne possono essere presenti i seguenti tipi di dati: char, varchar, nchar, nvarchar, text, ntext, image, xml, o varbinary(max) e FILESTREAM. Ogni indice full-text consente di indicizzare una o piΓΉ colonne della tabella e ciascuna colonna puΓ² essere utilizzata con una lingua specifica. Attraverso le query full-text Γ¨ possibile eseguire ricerche linguistiche rispetto ai dati di testo contenuti negli indici full-text, utilizzando parole e frasi in base alle regole di una determinata lingua, come ad esempio lβinglese o il giapponese. Le query full-text possono contenere semplici parole e frasi oppure piΓΉ forme di una parola o frase. Una query full-text restituisce qualsiasi documento contenente almeno una corrispondenza (nota anche come riscontro). Si ottiene una corrispondenza quando un documento di destinazione contiene tutti i termini specificati nella query full-text e soddisfa qualsiasi altra condizione di ricerca, come ad esempio la distanza entro i termini corrispondenti.
FunzionalitΓ della ricerca fulltext
Dopo lβaggiunta delle colonne a un indice full-text, gli utenti e le applicazioni possono eseguire query full-text sul testo contenuto allβinterno delle colonne. Queste query possono consentire la ricerca degli elementi seguenti:
- Una o piΓΉ parole o frasi specifiche (termine semplice)
- Parola o frase in cui le parole iniziano con il testo specificato (termine di prefisso)
- Forme flessive di una parola specifica (termine di generazione)
- Una parola o frase vicina a unβaltra parola o frase (termine vicino)
- Sinonimi di una parola specifica (thesaurus)
- Parole o frasi che utilizzano valori ponderati (termine ponderato) Nelle query full-text viene utilizzato un set ridotto di predicati (CONTAINS e FREETEXT) e funzioni (CONTAINSTABLE e FREETEXTTABLE).
Creazione e gestione di indici full-text
Le informazioni contenute negli indici full-text vengono utilizzate dal motore di ricerca full-text per compilare query full-text che consentono di cercare rapidamente parole o combinazioni di parole specifiche in una tabella. In un indice full-text vengono archiviate informazioni su parole significative e sulla relativa posizione allβinterno di una o piΓΉ colonne di una tabella di database. Un indice full-text Γ¨ un tipo speciale di indice funzionale basato su token compilato e gestito dal motore di ricerca full-text per SQL Server. Il processo di compilazione di un indice full-text Γ¨ diverso da quello di altri tipi di indici. AnzichΓ© costruire una struttura ad albero B basata su un valore archiviato in una determinata riga, il motore di ricerca full-text compila una struttura con indici invertito, in pila e compresso basata su singoli token dal testo indicizzato. La dimensione di un indice full-text Γ¨ limitata solo dalle risorse di memoria disponibili del computer in cui viene eseguita lβistanza di SQL Server. Γ consentito un solo indice full-text per tabella. Per creare un indice full-text su una tabella, questβultima deve contenere una colonna singola, univoca e non Null. Γ possibile compilare un indice full-text su colonne di tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary e varbinary(max). Il processo di creazione e gestione di un indice full-text Γ¨ definito popolamento (noto anche come ricerca per indicizzazione). Sono disponibili tre tipi di popolamento dellβindice full-text:
- popolamento completo
- popolamento basato sul rilevamento delle modifiche
- popolamento incrementale basato su timestamp
Pattern creazione indice
CREATE FULLTEXT index ON table_name(fields_name_separates_with comma) KEY index index_name
index_name Γ¨ (quasi) sempre la primary key. Esempio:
CREATE FULLTEXT index ON table_name(field_1, field_2...) KEY index PK_table_name
FREETEXTTABLE
Γ una funzione utilizzata nella clausola FROM di unβistruzione SELECT di Transact-SQL per eseguire una ricerca full-text SQL Server in colonne indicizzate full-text che contengono tipi di dati basati su caratteri. Questa funzione restituisce una tabella con 0 o piΓΉ righe per le colonne contenenti valori che corrispondono al significato e non solo allβesatta formulazione (grazie al fulltext), del testo specificato in freetext_string. Le query che utilizzano FREETEXTTABLE restituiscono un valore di classificazione per pertinenza (RANK) e una chiave full-text (KEY) per ogni riga.
FREETEXTTABLE(table, (column_list), 'freetext_string', top_n_by_rank)
Esempio:
SELECT * FROM FREETEXTTABLE(AnaContatti, (nome, cognome), 'Chiara', 1000)