Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In SQL Server e nel database SQL di Azure la ricerca full-text consente ad applicazioni e utenti di eseguire query full-text su dati di tipo carattere in tabelle di SQL Server. Prima di poter eseguire query full-text in una tabella, l'amministratore del database deve creare un indice full-text nella tabella. L'indice full-text include una o più colonne basate su caratteri nella tabella. Queste colonne possono avere uno dei tipi di dati seguenti: char
, varchar
, nchar
, nvarchar
, text
, ntext
, image
, xml
, varbinary(max)
o FILESTREAM. Ogni indice full-text indicizza una o più colonne della tabella e ogni colonna può usare una lingua specifica.
Le query full-text eseguono ricerche linguistiche su dati di testo in indici full-text operando su parole e frasi basate su regole di una determinata lingua, ad esempio inglese o giapponese. Le query full-text possono includere parole e frasi semplici o più forme di parola o frase. Una query full-text restituisce tutti i documenti che contengono almeno una corrispondenza (nota anche come hit). Una corrispondenza si verifica quando un documento di destinazione contiene tutti i termini specificati nella query full-text e soddisfa eventuali altre condizioni di ricerca, ad esempio la distanza tra i termini corrispondenti.
Annotazioni
La ricerca full-text è un componente facoltativo del motore di database di SQL Server. Per altre informazioni, vedere Installare SQL Server 2014.
Cosa posso fare con Full-Text Search?
La ricerca full-text è applicabile a un'ampia gamma di scenari aziendali, come la ricerca di articoli da parte di aziende di e-commerce su un sito Web, studi legali che ricercano cronologie di casi legali in un archivio di dati giuridici, o i reparti delle risorse umane che abbinano le descrizioni dei lavori con curricula archiviati. Le attività amministrative e di sviluppo di base della ricerca full-text sono equivalenti indipendentemente dagli scenari aziendali. Tuttavia, in uno scenario aziendale specifico, l'indice full-text e le query possono essere affinati per raggiungere gli obiettivi aziendali. Ad esempio, per un'attività commerciale elettronica l'ottimizzazione delle prestazioni potrebbe essere più importante della classificazione dei risultati, dell'accuratezza nel recupero (il numero di corrispondenze esistenti effettivamente restituite da una query full-text) o del supporto a più lingue. Per uno studio legale, la restituzione di ogni possibile riscontro (richiamo totale delle informazioni) potrebbe essere la considerazione più importante.
Full-Text Query di ricerca
Dopo l'aggiunta di colonne a un indice full-text, gli utenti e le applicazioni possono eseguire query full-text sul testo nelle colonne. Queste query possono cercare uno dei seguenti elementi:
Una o più parole o frasi specifiche (termine semplice)
Parola o frase in cui le parole iniziano con il testo specificato (termine prefisso)
Forme flessive di una parola specifica (termine di generazione)
Parola o frase vicina a un'altra parola o frase (termine di prossimità)
Forme sinonimi di una parola specifica (thesaurus)
Parole o frasi che usano valori ponderati (termine ponderato)
Le interrogazioni full-text non fanno distinzione tra maiuscole e minuscole. Ad esempio, la ricerca di "Alluminio" o "alluminio" restituisce gli stessi risultati.
Le query full-text usano un piccolo set di predicati Transact-SQL (CONTAINS e FREETEXT) e funzioni (CONTAINSTABLE e FREETEXTTABLE). Tuttavia, gli obiettivi di ricerca di un determinato scenario aziendale influenzano la struttura delle query full-text. Per esempio:
e-business- ricerca di un prodotto in un sito Web:
SELECT product_id FROM products WHERE CONTAINS(product_description, "Snap Happy 100EZ" OR FORMSOF(THESAURUS,'Snap Happy') OR '100EZ') AND product_cost < 200 ;
Ricerca di scenari di reclutamento per candidati di lavoro con esperienza con SQL Server:
SELECT candidate_name,SSN FROM candidates WHERE CONTAINS(candidate_resume,"SQL Server") AND candidate_division = 'DBA';
Per ulteriori informazioni, vedere Query con Full-Text Search.
Confronto tra LIKE e ricerca Full-Text
Contrariamente alla ricerca full-text, il predicato LIKE di Transact-SQL funziona unicamente con modelli di caratteri. Non è inoltre possibile utilizzare il predicato LIKE per eseguire query su dati binari formattati. Inoltre, l'esecuzione di una query LIKE su una grande quantità di dati di testo non strutturati è molto più lenta dell'esecuzione di una query full-text equivalente sugli stessi dati. Una query LIKE eseguita su milioni di righe di dati di testo può richiedere diversi minuti, mentre per una query full-text sugli stessi dati possono essere necessari al massimo pochi secondi, a seconda del numero di righe restituite.
Componenti e architettura di ricerca Full-Text
L'architettura di ricerca full-text è costituita dai processi seguenti:
Processo di SQL Server (sqlservr.exe).
Processo host del daemon di filtri (fdhost.exe).
Per motivi di sicurezza, i filtri vengono caricati da processi separati denominati host del daemon di filtri. I processi di fdhost.exe vengono creati da un servizio di avvio FDHOST (MSSQLFDLauncher) e vengono eseguiti con le credenziali di sicurezza dell'account del servizio di avvio FDHOST. Di conseguenza, il servizio launcher FDHOST deve essere in esecuzione per l'indicizzazione full-text e per le interrogazioni full-text. Per informazioni sull'impostazione dell'account del servizio per questo servizio, vedere Impostare l'account del servizio per il Daemon di lancio del filtro full-text.
Questi due processi contengono i componenti dell'architettura di ricerca full-text. Questi componenti e le relative relazioni sono riepilogati nella figura seguente. I componenti vengono descritti dopo l'illustrazione.
Processo di SQL Server
Il processo di SQL Server usa i componenti seguenti per la ricerca full-text:
Tabelle utenti. Queste tabelle contengono i dati da indicizzare per testo completo.
Raccoglitore di testo completo Il raccoglitore di testo completo lavora con i thread di scansione testo completo. È responsabile della pianificazione e della gestione della popolazione di indici full-text e anche per il monitoraggio dei cataloghi full-text.
File del thesaurus. Questi file contengono sinonimi di termini di ricerca. Per altre informazioni, vedere Configurare e gestire i file del thesaurus per la ricerca Full-Text.
Oggetti lista di esclusione. Gli oggetti stoplist contengono un elenco di parole comuni che non sono utili per la ricerca. Per ulteriori informazioni, consultare Configurare e gestire parole irrilevanti ed elenchi di parole irrilevanti per la ricerca full-text.
Query Processor di SQL Server. Il processore di query compila e esegue le query SQL. Se una query SQL include una query di ricerca full-text, la query viene inviata al motore di Full-Text, sia durante la compilazione che durante l'esecuzione. Il risultato della query viene confrontato con l'indice del testo completo.
motore di Full-Text. Il motore di Full-Text in SQL Server è completamente integrato con Query Processor. Il motore di Full-Text compila ed esegue query full-text. Nell'ambito dell'esecuzione delle query, il modulo Full-Text potrebbe ricevere input dal thesaurus e dall'elenco di parole non significative.
Scrittore dell'indice (indicizzatore). Il writer di indici compila la struttura usata per archiviare i token indicizzati.
Gestore di daemon del filtro. Il gestore del daemon di filtri è responsabile del monitoraggio dello stato dell'host del daemon di filtri per il motore Full-Text.
Processo host del daemon di filtri
L'host del daemon di filtri è un processo avviato dal motore di Full-Text. Esegue i seguenti componenti di ricerca testuale integrale, responsabili dell'accesso, del filtraggio dei dati e della suddivisione in parole delle tabelle, nonché per la suddivisione in parole e lo stemming degli input delle query.
I componenti dell'host del daemon di filtri sono i seguenti:
Gestore del protocollo. Questo componente esegue il pull dei dati dalla memoria per un'ulteriore elaborazione e accede ai dati da una tabella utente in un database specificato. Una delle sue responsabilità è raccogliere dati dalle colonne indicizzate in modalità full-text e trasmetterli all'host del daemon di filtri, che applicherà il filtraggio e l'analizzatore di parole in base alle esigenze.
Filtri. Alcuni tipi di dati richiedono l'applicazione di filtri prima che i dati in un documento possano essere indicizzati come testo completo, inclusi i dati nelle colonne
varbinary
,varbinary(max)
,image
oxml
. Il filtro utilizzato per un determinato documento dipende dal tipo di documento. Ad esempio, vengono usati filtri diversi per i documenti di Microsoft Word (.doc), i documenti di Microsoft Excel (.xls) e i documenti XML (.xml). Il filtro estrae quindi blocchi di testo dal documento, rimuovendo la formattazione incorporata e mantenendo il testo e, potenzialmente, le informazioni sulla posizione del testo. Il risultato è un flusso di informazioni testuali. Per altre informazioni, vedere Configurare e gestire i filtri per la ricerca.Interrompitori di parole e stemmatizzatori. Un word breaker è un componente specifico del linguaggio che trova i limiti delle parole in base alle regole lessicali di una determinata lingua (word breaking). Ogni word breaker è associato a un componente stemmer specifico del linguaggio che coniuga i verbi ed esegue espansioni flessive. In fase di indicizzazione, l'host del daemon di filtri usa un word breaker e uno stemmer per eseguire l'analisi linguistica sui dati testuali di una determinata colonna di tabella. La lingua associata a una colonna di tabella nell'indice full-text determina quale word breaker e stemmer vengono utilizzati per l'indicizzazione della colonna. Per altre informazioni, vedere Configurare e gestire word breaker e stemmer per la ricerca.
Full-Text: elaborazione ricerca
La ricerca full-text è basata sul motore di Full-Text. Il motore di Full-Text ha due ruoli: supporto dell'indicizzazione e supporto delle query.
Full-Text processo di indicizzazione
Quando viene avviato un popolamento full-text (noto anche come ricerca per indicizzazione), il motore di Full-Text esegue il push di batch di dati di grandi dimensioni in memoria e invia una notifica all'host del daemon di filtri. L'host filtra e suddivide i dati e converte i dati convertiti in elenchi di parole invertiti. La ricerca full-text quindi recupera i dati convertiti dagli elenchi di parole, elabora i dati per rimuovere le stopword e salva gli elenchi di parole per un batch in uno o più indici invertiti.
Quando si indicizzano i dati archiviati in una varbinary(max)
colonna o image
, il filtro, che implementa l'interfaccia IFilter , estrae il testo in base al formato di file specificato per tali dati, ad esempio Microsoft Word. In alcuni casi, i componenti di filtro richiedono che i varbinary(max)
dati o image
vengano scritti nella cartella filterdata anziché essere inseriti in memoria.
Nell'ambito dell'elaborazione, i dati di testo raccolti vengono passati tramite un word breaker per separare il testo in singoli token o parole chiave. Il linguaggio usato per la tokenizzazione è specificato a livello di colonna, oppure può essere identificato all'interno dei dati varbinary(max)
, image
o xml
dal componente filtro.
È possibile eseguire un'ulteriore elaborazione per rimuovere le parole non significative e normalizzare i token prima che vengano archiviati nell'indice full-text o in un frammento di indice.
Al termine di un popolamento, viene attivato un processo di unione conclusivo che associa i frammenti di indice in un singolo indice full-text master. Ciò consente prestazioni di query superiori poiché è necessario eseguire query solo sull'indice master anziché su alcuni frammenti di indice ed è possibile utilizzare statistiche di punteggio migliori per la classificazione della pertinenza.
Full-Text Processo di interrogazione
Il processore di interrogazioni passa le parti a testo completo di una query al motore Full-Text per l'elaborazione. Il motore Full-Text esegue la suddivisione delle parole e, facoltativamente, le espansioni del thesaurus, lo stemming e l'elaborazione delle parole irrilevanti. Le parti full-text della query vengono quindi rappresentate sotto forma di operatori SQL, principalmente come funzioni con valori di tabella di streaming . Durante l'esecuzione della query, queste funzioni di tabella con valore scalare accedono all'indice invertito per recuperare i risultati corretti. I risultati vengono restituiti al client a questo punto oppure vengono elaborati ulteriormente prima di essere restituiti al client.
Componenti linguistici e supporto linguistico nella ricerca Full-Text
La ricerca full-text supporta quasi 50 lingue diverse, ad esempio inglese, spagnolo, cinese, giapponese, arabo, Bangla e hindi. Per un elenco completo delle lingue full-text supportate, vedere sys.fulltext_languages (Transact-SQL). Ognuna delle colonne contenute nell'indice full-text è associata a un identificatore delle impostazioni locali di Microsoft Windows (LCID) che equivale a una lingua supportata dalla ricerca full-text. Ad esempio, LCID 1033 equivale all'inglese statunitense e LCID 2057 equivale all'inglese britannico. Per ogni lingua full-text supportata, SQL Server fornisce componenti linguistici che supportano l'indicizzazione e l'esecuzione di query sui dati full-text archiviati in tale lingua.
I componenti specifici del linguaggio includono quanto segue:
Segmentatori di parole e stemmer. Un word breaker trova i limiti delle parole in base alle regole lessicali di una determinata lingua (word break). Ogni "word breaker" è associato a uno "stemmer" che coniuga i verbi per la lingua specifica. Per ulteriori informazioni, vedere Configurare e gestire scompositori di parole e sradicatori di radici per la ricerca.
Elenchi di parole escluse. Un elenco di stopwords di sistema viene fornito, contenente un set di base di parole vuote (note anche come parole non significative). Una stopword è una parola che non aiuta la ricerca e viene ignorata dalle query full-text. Ad esempio, per la localizzazione inglese, parole come "a", "e", "is" e "the" sono considerate parole vuote. In genere, sarà necessario configurare uno o più file del thesaurus e liste di esclusione. Per ulteriori informazioni, consultare Configurare e gestire parole irrilevanti ed elenchi di parole irrilevanti per la ricerca full-text.
File del thesaurus. SQL Server installa anche un file del thesaurus per ogni lingua full-text, come pure un file del thesaurus globale. I file del thesaurus installati sono essenzialmente vuoti, ma è possibile modificarli per definire sinonimi per uno scenario linguistico o aziendale specifico. Sviluppando un thesaurus basato sui dati full-text in uso, è possibile ampliare in modo efficace l'ambito delle query full-text su tali dati. Per altre informazioni, vedere Configurare e gestire i file del thesaurus per la ricerca Full-Text.
Filtri (iFilter). L'indicizzazione di un documento in una
varbinary(max)
colonna di tipo di dati ,image
oxml
richiede un filtro per eseguire un'elaborazione aggiuntiva. Il filtro deve essere specifico del tipo di documento (.doc, .pdf, .xls, .xmle così via). Per altre informazioni, vedere Configurare e gestire i filtri per la ricerca.
I word breaker (e gli stemmer) e i filtri vengono eseguiti nel processo host del daemon di filtri (fdhost.exe).
Attività correlate
Scrittura di query Full-Text
Gestione di cataloghi e indici
Gestione dei componenti linguistici
Configurare e gestire i segmentatori di parole e gli stemmer per la ricerca
Visualizzare o modificare filtri registrati e separatori di parole
Ripristina gli analizzatori di parole usati dalla ricerca alla versione precedente
Modifica del word breaker utilizzato per le lingue Inglese (Stati Uniti) e Inglese (Regno Unito)
Personalizzare il comportamento dei word breaker con un dizionario personalizzato
Configurare e gestire i file del thesaurus per la ricerca Full-Text
Gestione della ricerca Full-Text