Processo di indicizzazione e query full-text

Il componente di indicizzazione della ricerca full-text è responsabile del popolamento iniziale dell'indice full-text e del relativo aggiornamento successivo al momento della modifica dei dati nelle tabelle con indicizzazione full-text.

Processo di indicizzazione full-text

Quando viene iniziato un popolamento full-text, noto anche come ricerca per indicizzazione, il motore di ricerca full-text esegue il push di batch di grandi dimensioni di dati in memoria e invia 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.

Nota

L'unione di frammenti di indice nell'indice master può richiedere l'esecuzione di molte operazioni di I/O, in quanto è necessario leggere e scrivere grandi quantità di dati, ma questa operazione non blocca le query in entrata. L'unione nell'indice master di una grande quantità di dati può inoltre comportare la creazione di una transazione con esecuzione prolungata, provocando un ritardo del troncamento del log delle transazioni durante il checkpoint. In questo caso, le dimensioni del log delle transazioni potrebbero aumentare notevolmente se si utilizza il modello di recupero con registrazione completa. È consigliabile verificare che il log delle transazioni contenga spazio sufficiente per una transazione con esecuzione prolungata prima di riorganizzare un indice full-text di grandi dimensioni in un database in cui viene utilizzato il modello di recupero con registrazione completa. Per ulteriori informazioni, vedere Gestione delle dimensioni del file di log delle transazioni.

Processo di esecuzione di query full-text

Query Processor passa 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.