Riprendiamo il database Biblioteca che abbiamo definito nella prima parte di questo articolo e mostriamo come eseguire ricerche di tipo Full-Text sulla colonna Riassunto della tabella Libri. A questo scopo, si devono utilizzare specifici operatori messi a disposizione da SQL Server, i più importanti dei quali sono CONTAINS e FREETEXT. Essi possono essere utilizzati esclusivamente nella clausola WHERE di un'istruzione SELECT , ma possono comparire anche all'interno di sottoquery.
Il predicato CONTAINS consente di ricercare:
Sintassi di CONTAINS
CONTAINS
( { column_name | (column_list) | * }
, '< contains_search_condition >'
[ , LANGUAGE language_term ]
)
I primi due parametri, obbligatori, sono, rispettivamente, il nome della colonna o delle colonne su cui eseguire la query e le condizioni di ricerca di tipo Full-Text, che possono anche essere molto complesse. Nel caso in cui la condizione sia una frase, oppure si voglia cercare per il prefisso di una parola, è necessario racchiudere l'espressione tra virgolette doppie. Il terzo argomento, facoltativo, indica la lingua con cui si vuole eseguire l'interrogazione; nel caso in cui non sia presente, viene utilizzata la lingua specificata in fase di creazione dell'indice.
Se, come primo parametro, si usa un asterisco, la ricerca viene automaticamente estesa a tutte le colonne della tabella su cui è stato definito un indice Full-Text.
Per una spiegazione più dettagliata della sintassi supportata da questo comando, si consiglia di consultare la guida di riferimento di T-SQL.
È importante ricordare che le ricerche di tipo Full-Text sono case-insensitive, ovvero non fanno distinzione tra maiuscole e minuscole. Inoltre, la punteggiatura viene ignorata e le parole non significative (ad esempio "il", "con", "da") non sono archiviate nell'indice, quindi vengono escluse dai criteri di ricerca: esse, infatti, tipicamente sono molto frequenti nei documenti, quindi non hanno alcuna utilità nella ricerca di testo specifico.
Vediamo qualche esempio di ricerca sul nostro database di prova con l'utilizzo dell'operatore CONTAINS. La seguente interrogazione restituisce i libri il cui sommario contiene il nome Renzo oppure Michele:
SELECT Autore, Titolo FROM Libri WHERE CONTAINS(Riassunto, '"Renzo" OR "Michele"');
Notiamo che i nomi sono racchiusi tra virgolette doppie, ma, trattandosi di termini singoli, in questo caso era anche possibile non utilizzarle. La prossima query, invece, recupera i testi che parlano dell'innamoramento, attraverso una ricerca basata sul prefisso innamor:
SELECT Autore, Titolo FROM Libri WHERE CONTAINS(Riassunto, '"innamor*"');
L'asterisco corrisponde a zero, uno o più caratteri della parola. In questo caso le doppie virgolette sono obbligatorie, altrimenti sarebbe stata eseguita una ricerca esatta di innamor*, che non avrebbe restituito alcun risultato.
|
SQL Maintenance Solution: soluzione free per la manutenzione di SQL Server |
Guida AccessIniziare a sviluppare database grazie alla potenza visuale offerta... |
Guida SQL Server 2005L'RDBMS di Microsoft è uno dei più utilizzati, soprattutto in ambito... |
Guida OracleScoprire ed approfondire un dei più importanti RDBMS sulla scena... |
Ogni settimana, in due distinte newsletter: notizie a approfondimenti su MySQL, SQLserver e Oracle.
Iscriviti alla newsletter