Ricerca full-text (SQL Server)

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.

[!NOTA]

La ricerca full-text è un componente facoltativo del Motore di database di SQL Server. Per ulteriori informazioni, vedere Installare SQL Server 2012.

Contenuto dell'argomento

  • Funzionalità della ricerca full-text

    • Query della ricerca full-text

    • Confronto tra LIKE e la ricerca full-text

  • Componenti e architettura della ricerca full-text

    • Processo di SQL Server

    • Processo host del daemon di filtri

  • Elaborazione della ricerca full-text

    • Processo di indicizzazione full-text

    • Processo di esecuzione di query full-text

  • Componenti linguistici e Supporto per la lingua nella ricerca full-text

  • Attività correlate

  • Contenuto correlato

Funzionalità della ricerca full-text

La ricerca full-text può essere utilizzata in un'ampia gamma di scenari aziendali, ad esempio nel commercio elettronico per la ricerca di articoli in un sito Web, negli uffici legali per la ricerca di casi in un repository di dati legali oppure nei reparti delle risorse umane per l'abbinamento dei posti di lavoro disponibili ai curriculum vitae in archivio. Le attività di sviluppo e amministrazione di base della ricerca full-text sono equivalenti indipendentemente dagli scenari aziendali. In uno scenario aziendale, tuttavia, l'indice e le query full-text possono essere modificati in base agli obiettivi aziendali da raggiungere. È ad esempio probabile che per un'attività di commercio elettronico l'ottimizzazione delle prestazioni sia ritenuta più importante della classificazione dei risultati, dell'accuratezza delle chiamate (quante delle corrispondenze esistenti vengono effettivamente restituite da una query full-text) o del supporto di più lingue. Invece, per un ufficio legale l'aspetto più importante potrebbe essere la restituzione di ogni possibile occorrenza (richiamo totale delle informazioni).

[INIZIO PAGINA]

Query della ricerca full-text

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)

Per le query di ricerca full-text non viene fatta distinzione tra maiuscole e minuscole. Ad esempio, dalla ricerca di "Alluminio" o "alluminio" vengono restituiti gli stessi risultati.

Nelle query full-text viene utilizzato un set ridotto di predicati (CONTAINS e FREETEXT) e funzioni (CONTAINSTABLE e FREETEXTTABLE) Transact-SQL. Tuttavia, gli obiettivi di ricerca di un determinato scenario aziendale influiscono sulla struttura delle query full-text. Ad esempio:

  • Commercio elettronico: 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 …
    
  • Assunzione di personale: ricerca di candidati con esperienza in SQL Server

    SELECT candidate_name,SSN FROM candidates WHERE CONTAINS(candidate_resume,”SQL Server”) AND candidate_division =DBA
    

Per ulteriori informazioni, vedere Esecuzione della query con ricerca Full-Text.

[INIZIO PAGINA]

Confronto tra LIKE e la ricerca full-text

Contrariamente alla ricerca full-text, il predicato Transact-SQL LIKE funziona unicamente con i 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.

[INIZIO PAGINA]

Componenti e architettura della ricerca full-text

L'architettura della ricerca full-text è costituita dai processi seguenti:

  • Processo di SQL Server (sqlservr.exe).

  • Processo host del daemon di filtri (fdhost.exe).

    Ai fini della sicurezza, i filtri vengono caricati da processi separati definiti host del daemon di filtri. I processi fdhost.exe vengono creati da un servizio dell'utilità di avvio di FDHOST (MSSQLFDLauncher) e vengono eseguiti con le credenziali di sicurezza dell'account del servizio dell'utilità di avvio di FDHOST. Il funzionamento delle query e dell'indicizzazione full-text dipende quindi dall'esecuzione del servizio dell'utilità di avvio di FDHOST. Per informazioni sull'impostazione dell'account di questo servizio, vedere Impostazione dell'account del servizio dell'Utilità di avvio del daemon di filtri full-text.

In questi due processi sono inclusi i componenti dell'architettura della ricerca full-text, riepilogati con le relative relazioni nell'illustrazione seguente. I componenti vengono descritti dopo l'illustrazione.

Architettura della ricerca full-text

[INIZIO PAGINA]

Processo di SQL Server

Nel processo di SQL Server vengono utilizzati i componenti seguenti per la ricerca full-text:

  • Tabelle utente. In queste tabelle sono contenuti i dati da inserire nell'indice full-text.

  • Gatherer full-text. Il gatherer full-text funziona con i thread della ricerca per indicizzazione full-text e consente di pianificare e gestire il popolamento degli indici full-text, nonché di monitorare i cataloghi full-text.

  • File del thesaurus. In questi file sono contenuti i sinonimi dei termini da cercare. Per ulteriori informazioni, vedere Configurare e gestire i file del thesaurus per la ricerca full-text.

  • Oggetti dell'elenco di parole non significative. Negli oggetti dell'elenco di parole non significative sono inclusi un insieme di parole comuni che non risultano utili per la ricerca. Per ulteriori informazioni, vedere Configurare e gestire parole non significative ed elenchi di parole non significative per la ricerca full-text.

  • SQL Server Query Processor. Query Processor consente di compilare ed eseguire query SQL. Se in una query SQL è inclusa una query di ricerca full-text, la query viene inviata al motore di ricerca full-text sia durante la compilazione sia durante l'esecuzione. Il risultato della query viene messo a confronto con l'indice full-text.

  • Motore di ricerca full-text. Il motore di ricerca full-text in SQL Server è completamente integrato con Query Processor e consente di compilare ed eseguire query full-text. Come parte dell'esecuzione di query, il motore di ricerca full-text può ricevere input dal thesaurus e dall'elenco di parole non significative.

  • Writer di indici (indicizzatore). Il writer di indici consente di compilare la struttura utilizzata per archiviare i token indicizzati.

  • Strumento di gestione del daemon di filtri. Lo strumento di gestione del daemon di filtri consente di monitorare lo stato dell'host del daemon di filtri per il motore di ricerca full-text.

[INIZIO PAGINA]

Processo host del daemon di filtri

L'host del daemon di filtri è un processo avviato dal motore di ricerca full-text e consente l'esecuzione dei componenti della ricerca full-text seguenti, responsabili dell'accesso, del filtraggio e del word breaking di dati dalle tabelle, nonché del word breaking e dello stemming dell'input della query.

I componenti dell'host del daemon di filtri sono i seguenti:

  • Protocol handler. Questo componente consente di effettuare il pull dei dati dalla memoria per un'ulteriore elaborazione e di accedere ai dati da una tabella utente in un database specificato. È inoltre responsabile della raccolta dei dati dalle colonne oggetto dell'indicizzazione full-text e del loro passaggio all'host del daemon di filtri tramite il quale verrà applicato il filtro e il word breaker in base alle specifiche esigenze.

  • Filtri. Per alcuni tipi di dati è richiesta l'applicazione di un filtro prima che i dati di un documento possano essere sottoposti all'indicizzazione full-text, inclusi i dati nelle colonne varbinary, varbinary(max), image o xml. Il filtro utilizzato per un documento dipende dal relativo tipo. Vengono infatti utilizzati filtri diversi per documenti di Microsoft Word (doc), documenti di Microsoft Excel (xls) e documenti XML (xml). Il filtro estrae 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 ulteriori informazioni, vedere Configurazione e gestione di filtri per la ricerca.

  • Word breaker e stemmer. Un word breaker è un componente specifico della lingua che consente di trovare i delimitatori di parola in base alle regole lessicali di una determinata lingua (word breaking). Ogni word breaker è associato a uno stemmer specifico della lingua che coniuga i verbi ed esegue le espansioni flessionali. In fase di indicizzazione, l'host del daemon di filtri utilizza un word breaker e uno stemmer per eseguire l'analisi linguistica sui dati testuali di una colonna di tabella specificata. Il word breaker e lo stemmer utilizzati per l'indicizzazione della colonna sono determinati dalla lingua associata a una colonna di tabella nell'indice full-text. Per ulteriori informazioni, vedere Configurazione e gestione di word breaker e stemmer per la ricerca.

[INIZIO PAGINA]

Elaborazione della ricerca full-text

La ricerca full-text è supportata dal motore di ricerca full-text che svolge due ruoli, vale a dire il supporto per l'indicizzazione e quello per l'esecuzione di query.

Processo di indicizzazione full-text

Quando viene iniziato un popolamento full-text, noto anche come ricerca per indicizzazione, tramite il motore di ricerca full-text viene eseguito il push di batch di grandi dimensioni di dati in memoria e viene inviata una notifica all'host del daemon di filtri. L'host filtra ed esegue il word breaking dei dati ed esegue inoltre la conversione dei dati convertiti in elenchi di parole invertiti. La ricerca full-text effettua quindi il pull dei dati convertiti dagli elenchi di parole, elabora i dati per rimuovere le parole non significative e salva in modo permanente gli elenchi di parole per un batch in uno o più indici invertiti.

Durante l'indicizzazione dei dati archiviati in una colonna varbinary(max) o image, il filtro, che implementa l'interfaccia IFilter, estrae testo in base al formato file specificato per tali dati, ad esempio Microsoft Word. Per i componenti filtro talvolta i dati di tipo varbinary(max) o image devono essere scritti nella cartella filterdata e non deve esserne eseguito il push in memoria.

Nell'ambito dell'elaborazione, i dati di testo raccolti vengono sottoposti a un word breaker per separare il testo in singoli token o parole chiave. La lingua utilizzata per la suddivisione in token viene specificata a livello di colonna o può essere identificata 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 di archiviarli 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.

[INIZIO PAGINA]

Processo di esecuzione di query full-text

Query Processor consente di passare le parti full-text di una query al motore di ricerca full-text affinché vengano elaborate. Il motore di ricerca full-text esegue il word breaking e, facoltativamente, le espansioni del thesaurus, lo stemming e l'elaborazione delle parole non significative. Le parti full-text della query vengono rappresentate come operatori SQL, principalmente come funzioni di flusso con valori di tabella. Durante l'esecuzione della query, queste funzioni accedono all'indice invertito per recuperare i risultati corretti. I risultati vengono restituiti al client immediatamente oppure dopo essere stati ulteriormente elaborati.

[INIZIO PAGINA]

Componenti linguistici e Supporto per la lingua nella ricerca full-text

La ricerca full-text supporta quasi 50 lingue, tra cui inglese, spagnolo, cinese, giapponese, arabo, bengali e hindi. Per un elenco completo delle lingue full-text supportate, vedere sys.fulltext_languages (Transact-SQL). A ognuna delle colonne contenute nell'indice full-text è associato un identificatore delle impostazioni locali (LCID) di Microsoft Windows che corrisponde a una lingua supportata dalla ricerca full-text. L'identificatore LCID 1033, ad esempio, corrisponde all'inglese americano, mentre l'identificatore LCID 2057 corrisponde all'inglese britannico. Per ogni lingua full-text supportata, in SQL Server vengono forniti componenti linguistici che supportano l'indicizzazione e l'esecuzione di query su dati full-text archiviati in quella lingua.

Tra i componenti specifici della lingua sono inclusi gli elementi seguenti:

  • Word breaker e stemmer. Un word breaker consente di trovare i delimitatori di parola in base alle regole lessicali di una determinata lingua (word breaking). A ogni word breaker è associato uno stemmer tramite cui vengono coniugati i verbi per la stessa lingua. Per ulteriori informazioni, vedere Configurazione e gestione di word breaker e stemmer per la ricerca.

  • Elenchi di parole non significative. Viene fornito un elenco di parole non significative del sistema contenente un set di parole non significative di base. Per parola non significativa si intende una parola inutile ai fini della ricerca e pertanto ignorata dalle query full-text. Ad esempio, nelle impostazioni locali della lingua italiana parole quali "circa", "con", "devo" e "cui" sono considerate non significative. In genere, è necessario configurare uno o più file del thesaurus ed elenchi di parole non significative. Per ulteriori informazioni, vedere Configurare e gestire parole non significative ed elenchi di parole non significative per la ricerca full-text.

  • File del thesaurus. In SQL Server vengono inoltre installati un file del thesaurus per ogni lingua full-text e un file del thesaurus globale. I file del thesaurus installati sono praticamente vuoti, ma è possibile modificarli per definire sinonimi per una lingua o uno scenario 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 ulteriori informazioni, vedere Configurare e gestire i file del thesaurus per la ricerca full-text.

  • Filtri (iFilters). Per l'indicizzazione di un documento in una colonna del tipo di dati varbinary(max), image o xml è richiesta l'applicazione di un filtro per eseguire ulteriori operazioni di elaborazione. Il filtro deve essere specifico del tipo di documento (doc, pdf, xls, xml e così via). Per ulteriori informazioni, vedere Configurazione e gestione di filtri per la ricerca.

I word breaker, gli stemmer e i filtri vengono eseguiti nel processo host del daemon di filtri (fdhost.exe).

[INIZIO PAGINA]

Attività correlate

[INIZIO PAGINA]

Contenuto correlato

[INIZIO PAGINA]