Condividi tramite


Processo di indicizzazione in Windows Search

In questo argomento vengono descritte le tre fasi del processo di indicizzazione e dei componenti principali coinvolti in ognuna, vengono illustrate le tempistiche dell'attività di indicizzazione e vengono fornite alcune note per gli sviluppatori di terze parti che desiderano indicizzare gli archivi dati o i formati di file.

Questo argomento è organizzato come segue:

Panoramica

Windows Search supporta l'indicizzazione di proprietà e contenuto da file di formati di file diversi, ad esempio formati .doc o jpeg e archivi dati, ad esempio il file system o le cassette postali di Windows Outlook. Esistono due tipi di indici: indici di valore che consentono di filtrare e ordinare in base all'intero valore di una proprietà e agli indici invertiti che indicizzano le parole all'interno di proprietà o contenuto testuale. Se si dispone di un formato di file personalizzato o di un archivio dati, è necessario comprendere in che modo gli indici di Windows Search consentono di indicizzare correttamente gli elementi.

Il processo di indicizzazione avviene in tre fasi controllate da un componente di Windows Search denominato gatherer. Nella prima fase, il servizio Gatherer aggiunge GLI URL alle code. Gli URL identificano gli elementi da indicizzare e le code sono semplicemente elenchi di URL con priorità. Nella seconda fase, il servizio Gatherer coordina altri componenti di Windows Search e di terze parti per accedere agli elementi e raccogliere dati su di essi. Infine, nella terza fase, i dati raccolti vengono aggiunti all'indice.

Il diagramma seguente illustra i componenti principali e il flusso dei dati tramite il processo di indicizzazione. Alcuni componenti sono coinvolti nella raccolta dei dati per l'indice. Alcuni di questi fanno parte di Windows Search e alcuni provengono da applicazioni di terze parti. Se si dispone di un archivio dati personalizzato o di un formato di file, Windows Search si basa sul gestore del protocollo e sul filtro per l'accesso agli URL e la creazione di proprietà per l'indicizzazione. I componenti di Windows Search sono visualizzati in blu e i componenti di terze parti sono visualizzati in verde.

diagramma che mostra l'interazione tra componenti durante il processo di indicizzazione

Fase 1: Url di accodamento per l'indicizzazione

Nella prima fase dell'indicizzazione, il servizio Gatherer raccoglie informazioni sugli aggiornamenti agli archivi dati, confronta tali informazioni con l'ambito di ricerca per indicizzazione noto e quindi compila una coda di URL da attraversare per raccogliere dati per l'indice. Per le origini che non si basano sulla notifica, ad esempio le unità FAT, il servizio Gatherer avvia periodicamente un attraversamento completo dell'ambito di ricerca per indicizzazione in modo che i dati nell'indice vengano mantenuti aggiornati. Per le origini, ad esempio NTFS, è presente una sola ricerca per indicizzazione e tutto il resto viene gestito dalle notifiche da USN Change Journal. Non esiste anche alcuna ricerca per indicizzazione di Microsoft Outlook. Il diagramma seguente mostra una visualizzazione generale del processo di accodamento per l'indicizzazione non per indicizzazione.

diagramma che mostra il processo di query per l'indicizzazione non sottoposta a ricerca per indicizzazione

Nella parte restante di questa sezione viene illustrato come Windows Search determina gli URL da sottoporre a ricerca per indicizzazione e definisce alcuni termini importanti lungo la strada.

Ambito ricerca per indicizzazione L'ambito di ricerca per indicizzazione è un set di URL attraversati da Windows Search per raccogliere dati sugli elementi che l'utente desidera indicizzare per ricerche più veloci. Windows Search aggiunge alcuni URL all'ambito di ricerca per indicizzazione per impostazione predefinita, ad esempio i percorsi delle cartelle Documenti e Immagini degli utenti. Altri URL possono essere aggiunti da applicazioni, utenti e Criteri di gruppo di terze parti. Infine, sia gli utenti che i Criteri di gruppo possono escludere in modo esplicito gli URL. Windows Search accetta tutti gli URL aggiunti e rimuove gli URL esclusi per determinare l'ambito di ricerca per indicizzazione. Si tratta del working set di URL da cui inizia il lavoro del servizio Gatherer.

Gatherer Il servizio Gatherer è un componente di Windows Search che raccoglie informazioni sugli URL all'interno dell'ambito di ricerca per indicizzazione e crea una coda di URL per l'indicizzatore da sottoporre a ricerca per indicizzazione. Quando un elemento nell'ambito della ricerca per indicizzazione viene aggiunto, eliminato o aggiornato, il servizio Gatherer riceve una notifica dal provider di notifiche dell'archivio dati. È presente una ricerca per indicizzazione iniziale in cui il servizio Gatherer inizia nella radice dell'ambito di ricerca per indicizzazione. L'URL viene passato al gestore del protocollo e quindi al filtro IFilter appropriato. Il filtro è in genere un'enumerazione di directory che produce più URL. Le notifiche sono lo stato stabile. In genere, ogni archivio dati ha un proprio gestore di protocollo che fornisce queste notifiche. Ad esempio, nel file system locale, il journal delle modifiche USN funge da provider di notifiche per tutti gli URL nel protocollo di file://. Analogamente, Microsoft Outlook funge da provider di notifiche per tutti gli URL nel protocollo di mapi://. Quando un utente riceve, sposta o elimina la posta elettronica, Outlook invia una notifica al gatherer dello stato modificato del messaggio di posta elettronica. Da queste notifiche, il servizio Gatherer crea code di indicizzazione di URL per la ricerca per indicizzazione.

Indicizzazione di code Le code di indicizzazione sono elenchi di URL che identificano gli elementi che devono essere indicizzati o ri indicizzati. Il servizio Gatherer confronta gli URL ricevuti dai provider di notifiche agli URL nell'ambito della ricerca per indicizzazione. Ogni URL dei provider di notifiche che rientra nell'ambito della ricerca per indicizzazione viene aggiunto a una coda usata dal servizio Gatherer per classificare in ordine di priorità gli URL da elaborare successivamente.

Sono disponibili tre code: notifiche con priorità elevata, notifiche normali e ricerche per indicizzazione periodiche. La coda ad alta priorità è per le notifiche che devono essere elaborate immediatamente. Ad esempio, quando un utente modifica la proprietà title di un elemento in Esplora risorse, la visualizzazione Esplora risorse deve essere aggiornata immediatamente dopo la modifica. La coda di notifica normale riguarda tutte le notifiche di modifica rimanenti. Le code di notifica vengono elaborate prima della coda di ricerca per indicizzazione perché è più probabile che gli elementi modificati siano di interesse per un utente. Il servizio Gatherer accede ai dati per gli URL in ogni coda all'ordine FIFO (First Out).

Per altre informazioni sulla definizione delle priorità e sulle API di eventi introdotte in Windows 7, vedere Indicizzazione di priorità ed eventi di set di righe in Windows 7. Per altre informazioni sulla gestione e le notifiche dell'ambito di ricerca per indicizzazione, vedere Fornire notifiche di modifica e Utilizzo di Gestione ambito ricerca per indicizzazione.

Fase 2: URL di ricerca per indicizzazione

Nella seconda fase dell'indicizzazione, il servizio Gatherer esegue la ricerca per indicizzazione nelle code, accedendo agli archivi dati e recuperando i flussi degli elementi. Innanzitutto, il servizio Gatherer trova il gestore di protocollo appropriato per ogni URL. Il servizio Gatherer passa quindi l'URL al gestore del protocollo. Il gestore del protocollo accede all'elemento e passa nuovamente i metadati dell'elemento al servizio Gatherer. Il servizio Gatherer usa i metadati per identificare il filtro corretto.

Il diagramma seguente mostra una visualizzazione generale del processo di ricerca per indicizzazione degli URL. Questa fase include un notevole coordinamento e comunicazione tra i componenti.

diagramma che illustra il processo di ricerca per indicizzazione degli URL e l'accesso agli elementi

Nella parte restante di questa sezione viene descritto come Windows Search accede agli elementi per l'indicizzazione e illustra i ruoli di ognuno dei componenti coinvolti.

Gatherer Nella fase 2, la fase di ricerca per indicizzazione, il servizio Gatherer elabora gli URL nelle code, a partire dalla coda con priorità elevata. Ogni URL viene esaminato per identificare il protocollo. Il servizio Gatherer cerca quindi il gestore del protocollo registrato per tale protocollo e lo crea nel processo host del protocollo di ricerca.

Host del protocollo di ricerca L'host del protocollo di ricerca è semplicemente un processo host boxed per i gestori del protocollo. Windows Search crea in genere due processi host di questo tipo, uno eseguito nel contesto di sicurezza del sistema e uno eseguito nel contesto di sicurezza utente. Questa separazione garantisce che i dati specifici di un utente non vengano mai eseguiti nel contesto di sistema.

Windows Search usa anche il processo host per isolare un'istanza di un gestore di protocollo da altri processi o applicazioni. In questo modo, nessuna applicazione esterna può accedere a tale istanza specifica del gestore del protocollo e, se il gestore del protocollo ha esito negativo in modo imprevisto, viene interessato solo il processo di indicizzazione. Poiché il processo host esegue codice di terze parti (gestori di protocollo), Windows Search ricicla periodicamente il processo per ridurre al minimo il tempo in cui un attacco riuscito deve sfruttare le informazioni nel processo. Oltre a questo, l'host del protocollo di ricerca non influisce sulla ricerca per indicizzazione di URL o indicizzazione di elementi.

Gestori di protocollo I gestori di protocollo forniscono l'accesso agli elementi in un archivio dati usando il protocollo dell'archivio dati. Ad esempio, il gestore del protocollo NTFS fornisce l'accesso ai file in un'unità locale usando il protocollo file://. Il gestore del protocollo sa come attraversare l'archivio dati, identificare gli elementi nuovi o aggiornati e inviare una notifica al servizio Gatherer. All'inizio della ricerca per indicizzazione, il gestore del protocollo fornisce un oggetto IUrlAccessor al servizio Gatherer da associare al flusso sottostante dell'elemento e restituisce metadati dell'elemento, ad esempio restrizioni di sicurezza e ora dell'ultima modifica.

Nota

I gestori di protocollo non sono componenti di Windows Search; sono componenti del protocollo specifico e dell'archivio dati che sono progettati per l'accesso. Se si dispone di un archivio dati personalizzato da indicizzare, è necessario implementare un gestore di protocollo. Per altre informazioni sui gestori di protocollo e su come implementare uno, vedere Sviluppo di gestori di protocollo.

Metadati e flusso Usando i metadati restituiti dall'oggetto IUrlAccessor del gestore del protocollo, il servizio Gatherer identifica il filtro corretto per l'URL. Il servizio Gatherer analizza l'estensione del nome file dell'elemento e cerca il filtro registrato per tale estensione. Se il servizio Gatherer non riesce a trovare un filtro, Windows Search usa i metadati per derivare un set minimo di informazioni sulle proprietà di sistema , ad esempio System.ItemName, e aggiorna l'indice. In caso contrario, se il servizio Gatherer trova il filtro, inizia la terza fase dell'indicizzazione.

Fase 3: Aggiornamento dell'indice

Nella terza fase dell'indicizzazione, il servizio Gatherer crea un'istanza del filtro corretto per l'URL e inizializza il filtro con il flusso dall'oggetto IUrlAccessor . Il filtro accede quindi all'elemento e restituisce il contenuto per l'indice. Se si dispone di un formato di file personalizzato, Windows Search si basa sul filtro per accedere agli URL e generare contenuto e proprietà per l'indicizzazione.

Il diagramma seguente illustra una visualizzazione generale del processo di accesso ai dati. Questa fase include un notevole coordinamento e comunicazione tra i componenti.

diagramma che mostra i dati degli elementi generati per l'indice

Nella parte restante di questa sezione viene descritto come Windows Search accede ai dati degli elementi per l'indicizzazione e illustra i ruoli di ognuno dei componenti coinvolti.

Gatherer All'inizio di questa fase, il ruolo del servizio Gatherer consiste nel creare un'istanza del filtro corretto per l'elemento e passarlo al flusso di elementi. Alla fine di questa fase, il servizio Gatherer accetta il contenuto e le proprietà generati dal gestore filtro e proprietà e aggiorna l'indice.

Host filtro L'host di filtro è semplicemente un processo host per i filtri e i gestori di proprietà e serve uno scopo simile all'host del protocollo di ricerca. Il processo host isola i filtri e i gestori di proprietà dal resto del sistema per gli stessi motivi di sicurezza e stabilità per cui l'host del protocollo di ricerca elabora isolare i gestori del protocollo. Il processo host viene eseguito con diritti minimi (non può nemmeno accedere al file system) e viene occasionalmente riciclato per proteggersi dagli attacchi alla sicurezza. Windows Search monitora anche l'uso delle risorse in modo che, se un filtro utilizza troppe risorse, il processo host viene riciclato.

Filtri I filtri sono componenti critici nel processo di indicizzazione che generano informazioni sugli elementi per il servizio Gatherer. I filtri sono denominati in base all'interfaccia principale usata nell'implementazione, all'interfaccia IFilter e di conseguenza vengono talvolta definiti IFilter. Esistono due tipi di filtri: uno che interagisce con singoli elementi come file e uno che interagisce con contenitori come cartelle. Entrambi forniscono i dati per l'indice.

Usando i metadati restituiti dall'oggetto IUrlAccessor del gestore del protocollo, il servizio Gatherer identifica il filtro corretto per un URL specifico e lo passa al flusso. Il servizio Gatherer identifica il filtro corretto tramite un gestore di protocollo o tramite l'estensione del nome file, il tipo MIME o l'identificatore di classe (CLSID). Se l'URL punta a un contenitore, il filtro genera proprietà per il contenitore ed enumera gli elementi nel contenitore (URL figlio). Se l'URL punta a un elemento, il filtro restituisce il contenuto testuale, se la lettura delle proprietà e sono più complesse dei gestori di proprietà. In genere, è consigliabile che i filtri emettano il contenuto degli elementi mentre i gestori di proprietà generano proprietà degli elementi. Tuttavia, se il filtro deve funzionare con le applicazioni meno recenti che non riconoscono i gestori di proprietà, è possibile implementare il filtro anche per generare proprietà.

Nota

I filtri non sono componenti di Windows Search; sono componenti correlati al formato di file o al contenitore specifico a cui sono progettati per l'accesso. Per altre informazioni sui filtri e su come implementarne uno per un formato di file o un contenitore personalizzato, vedere Procedure consigliate per la creazione di gestori di filtri in Windows Search.

Nella tabella seguente sono elencati i risultati ricevuti dal servizio Gatherer da un filtro (IFilter) e da un gestore di proprietà (IPropertyStore) durante il processo di indicizzazione.

Ifilter Ipropertystore
Consenti scrittura No
Combinare contenuto e proprietà No
Multilingue No
Creare collegamenti No
MIME No
Limiti di testo Frase, paragrafo, capitolo Nessuno
Client/server Entrambe Client
Implementazione Complex Semplice

Gestori di proprietà I gestori di proprietà sono componenti che leggono e scrivono proprietà per un formato di file specifico. Accedono agli elementi e generano proprietà per il servizio Gatherer nello stesso modo in cui i filtri vengono applicati al contenuto. I gestori di proprietà sono più facili da implementare rispetto ai filtri. Se un formato di file basato su testo è molto semplice o si prevede che i file siano molto piccoli, il gestore di proprietà può generare sia proprietà che contenuto.

Nota

I gestori di proprietà non sono componenti di Windows Search; sono componenti correlati al formato di file specifico che sono progettati per accedere. Per altre informazioni sui gestori di proprietà e su come implementarne uno per un formato di file personalizzato, vedere Sviluppo di gestori di proprietà per Windows Search.

Proprietà Windows Search offre un sistema di proprietà che include una libreria di grandi dimensioni di proprietà. Qualsiasi proprietà può essere visualizzata in qualsiasi elemento, come definito dal gestore di filtri o proprietà. Se si dispone di un formato di file personalizzato, è possibile eseguire il mapping delle proprietà del formato di file a queste proprietà di sistema ed è possibile creare nuove proprietà personalizzate. Quando il gestore di filtri o proprietà genera queste proprietà, il servizio Gatherer aggiorna l'indice in modo che gli utenti possano eseguire ricerche usando le proprietà. Per altre informazioni sulla creazione e la registrazione di proprietà personalizzate per un formato di file, vedere Sistema di proprietà.

SystemIndex L'indice, denominato SystemIndex, archivia i dati indicizzati ed è costituito da un archivio di proprietà e indici sulle proprietà e sul contenuto per le proprietà degli elementi e un indice invertito per il contenuto testuale e le proprietà. Dopo che il servizio Gatherer aggiorna l'indice, l'indice può essere sottoposto a query da Windows Search e da altre applicazioni. Per altre informazioni sui modi per eseguire query sull'indice, vedere Esecuzione di query sull'indice a livello di codice.

Nota

Tenere presente che quando si registra nuovamente uno schema, le modifiche apportate agli attributi delle proprietà definite in precedenza potrebbero non essere rispettate dall'indicizzatore. La soluzione consiste nel ricompilare l'indice o introdurre nuove proprietà che riflettono le modifiche anziché aggiornare quelle precedenti (scelta non consigliata). Per altre informazioni, vedere Note to Implementers in Properties System Overview.For more information, see Note to Implementers in Properties System Overview.

Modalità di pianificazione dell'indicizzazione

Quando Windows Search viene installato per la prima volta, esegue un'indicizzazione completa dell'ambito di ricerca per indicizzazione, sospendo durante periodi di attività di I/O e utente elevate. L'ambito di ricerca per indicizzazione predefinito è costituito da percorsi di libreria predefiniti, ad esempio Documenti, Musica, Immagini e Video. Le notifiche vengono elaborate anche prima del completamento della ricerca per indicizzazione iniziale. Occasionalmente, il servizio Gatherer esegue la ricerca per indicizzazione degli URL dall'ambito di ricerca per indicizzazione completo. Queste ricerche per indicizzazione complete assicurano che i dati nell'indice siano aggiornati. Ad esempio, se un provider di notifiche non riesce a inviare notifiche o se l'servizio di ricerca di Windows viene terminato in modo imprevisto, il servizio Gatherer non avrà alcuna conoscenza degli elementi nuovi o modificati e non indicizza tali elementi. Esistono due tipi di origini: solo notifica e notifica abilitata. In entrambe le origini, il servizio Gatherer esegue inizialmente la ricerca per indicizzazione dell'indice. Dopo la ricerca per indicizzazione iniziale, le origini di sola notifica non eseguiranno di nuovo una ricerca per indicizzazione completa, a meno che non si verifichi un errore, ad esempio il journal delle modifiche USN in sequenza. Le origini abilitate per le notifiche eseguono una ricerca per indicizzazione incrementale all'avvio dell'indicizzatore, ma quindi restare in ascolto delle notifiche durante l'esecuzione. NTFS e Microsoft Outlook sono solo notifiche. Internet Explorer e FAT sono abilitati per la notifica.

Note per gli implementatori

La qualità dei dati nell'indice e l'efficienza del processo di indicizzazione dipendono in gran parte dall'implementazione del filtro e del gestore delle proprietà. Poiché il filtro viene chiamato ogni volta che un URL identifica il formato di file, il processo di indicizzazione può rallentare notevolmente se il filtro è inefficiente. Se il gestore delle proprietà non esegue correttamente il mapping di tutte le proprietà del file alle proprietà di sistema o non genera correttamente queste proprietà, i dati nell'indice non saranno corretti e le ricerche successive di tali proprietà restituiranno risultati non corretti. Se il gestore di filtri o proprietà ha esito negativo, l'indicizzatore non sarà in grado di indicizzare i dati.

Le applicazioni e i processi diversi da Windows Search si basano su gestori di protocollo, filtri e gestori di proprietà. Le implementazioni possono influire sulle applicazioni in modi non previsti. La Guida allo sviluppo di Windows Search fornisce consigli sulle scelte di progettazione e sul test di ognuno di questi componenti.

Indicizzazione, esecuzione di query e notifiche in Windows Search

Elementi inclusi nell'indice

Processo di query in Windows Search

Processo notifiche in Windows Search

Requisiti di formattazione url