Notifica dell'indice delle modifiche (Windows Search)
Usando i componenti delle API di notifica è possibile notificare all'indicizzatore che un elemento è stato modificato, spostato o eliminato e può aggiungere ambiti di ricerca alla coda di URL dell'indicizzatore di Windows Search che richiedono l'indicizzazione.
I componenti possono notificare all'indicizzatore di Windows Search che i dati nel relativo archivio sono stati modificati. Di solito, puoi fare affidamento sulle scansioni pianificate dell'indicizzatore. Tuttavia, fornire notifiche all'indicizzatore può migliorare le prestazioni assicurandosi che l'indicizzatore non esegua la scansione dell'intero archivio durante gli aggiornamenti incrementali. Ad esempio, questo potrebbe essere consigliato se si prevede che l'archivio dati sia estremamente grande e/o eccezionalmente occupato, ad esempio un archivio dati di posta elettronica.
- Implementazione di notifiche gestite dall'indicizzatore
- Implementazione di notifiche gestite dal provider
- risorse aggiuntive
- argomenti correlati
Implementazione delle notifiche gestite dall'indicizzatore
Le notifiche gestite dall'indicizzatore consentono di controllare l'accesso all'archivio dati, liberando al tempo stesso la gestione della coda delle notifiche durante l'intero processo di indicizzazione. Il provider di notifiche deve monitorare le modifiche all'archivio dati e creare una coda di notifiche. Periodicamente, il provider invia un batch di notifiche di modifica all'indicizzatore. Quando l'indicizzatore riceve le notifiche, restituisce una conferma e puoi rimuovere gli elementi dalla coda. Se dopo un periodo di tempo non si riceve un acknowledgement, è possibile inviare nuovamente le notifiche. In caso di errore, l'indicizzatore ricompila la coda interna di elementi da sottoporre a ricerca per indicizzazione o esegue una ricerca per indicizzazione incrementale dell'archivio.
Per implementare le notifiche gestite dall'indicizzatore, è necessario implementare quanto segue:
- Un meccanismo per il monitoraggio delle modifiche nell'archivio dati.
- Struttura dei dati per accodare le informazioni (più strutture SEARCH_ITEM_PERSISTENT_CHANGE) su tali modifiche.
- interfaccia ISearchPersistentItemsChangedSink per inviare le notifiche all'indicizzatore e ottenere riconoscimenti di notifica dall'indicizzatore.
Coda delle notifiche
È necessario monitorare e accodare ogni modifica nell'archivio dati per l'invio all'indicizzatore come notifica. Il numero di notifiche in coda e la frequenza con cui vengono inviate all'indicizzatore dipende dalle circostanze. È possibile inviare un batch di notifiche per ogni n numero di modifiche o dopo un t intervallo di tempo, o una combinazione di entrambi.
L'indicizzatore prevede che le notifiche vengano visualizzate in una matrice di strutture SEARCH_ITEM_PERSISTENT_CHANGE, pertanto è possibile scegliere di implementare la coda in modo analogo.
ISearchPersistentItemsChangedSink
Per accedere a questa interfaccia, creare prima un'istanza di un oggetto ISearchManager per ottenere l'accesso a un oggetto ISearchCatalogManager. Da tale oggetto ISearchCatalogManager, si istanzia un oggetto ISearchPersistentItemsChangedSink e si notifica l'indicizzatore delle modifiche dei dati con una chiamata al metodo OnItemsChanged.
Nella chiamata a questo metodo si include il numero di modifiche segnalate e una matrice di strutture SEARCH_ITEM_PERSISTENT_CHANGE. Viene restituita una matrice di codici di completamento HR che indica se ogni URL è stato accettato per l'indicizzazione. Questo è il tuo messaggio di conferma dall'indicizzatore.
Implementazione delle notifiche gestite dal provider
Le notifiche gestite dal provider consentono di controllare l'accesso all'archivio dati e di monitorare lo stato di avanzamento dell'indicizzatore durante l'aggiornamento del catalogo di Windows Search. Il provider deve monitorare le modifiche all'archivio dati e creare una coda di notifiche. Periodicamente, il provider invia un batch di notifiche di modifica all'indicizzatore. Quando l'indicizzatore riceve le tue notifiche, restituisce una conferma. Se dopo un periodo di tempo non si riceve un acknowledgement, è possibile inviare nuovamente le notifiche. Quando l'indicizzatore esegue la ricerca per indicizzazione nell'archivio dati e aggiorna il catalogo di Windows Search, invia una notifica al provider di ogni aggiornamento del catalogo ed è possibile rimuovere gli elementi dalla coda. Il provider gestisce la coda di notifica durante questo processo in modo che, in caso di errore, sia possibile inviare nuovamente notifiche all'indicizzatore.
Per implementare le notifiche gestite dal provider, è necessario implementare quanto segue:
- Un meccanismo per il monitoraggio delle modifiche nell'archivio dati.
- Struttura di dati per mettere in coda le informazioni (più strutture SEARCH_ITEM_CHANGE) riguardanti tali modifiche.
- interfaccia ISearchItemsChangedSink per inviare le notifiche all'indicizzatore e ottenere riconoscimenti di notifica dall'indicizzatore.
- interfaccia ISearchNotifyInlineSite per ricevere aggiornamenti sullo stato dell'indicizzazione.
Coda delle notifiche
È necessario monitorare e accodare ogni modifica nell'archivio dati per l'invio all'indicizzatore come notifica. Il numero di notifiche in coda e la frequenza con cui vengono inviate all'indicizzatore dipende dalle circostanze. Potresti inviare un batch di notifiche per ogni n numero di modifiche, oppure dopo un certo t intervallo di tempo, o una combinazione di entrambi.
L'indicizzatore prevede che le notifiche vengano visualizzate in una matrice di strutture SEARCH_ITEM_CHANGE, pertanto è possibile scegliere di archiviare le informazioni sulle modifiche in modo analogo. Tuttavia, è anche necessario essere in grado di associare le notifiche inviate con gli acknowledgement e gli aggiornamenti restituiti dall'indicizzatore. È anche possibile essere in grado di rilevare il tempo necessario per ottenere riconoscimenti, in modo da decidere se/quando inviare nuovamente le notifiche.
ISearchItemsChangedSink
Per accedere a questa interfaccia, creare prima un'istanza di un oggetto ISearchManager per ottenere l'accesso a un oggetto ISearchCatalogManager. Da tale oggetto ISearchCatalogManager, si crea un'istanza di un oggetto ISearchItemsChangedSink e si notifica l'indicizzatore delle modifiche dei dati con una chiamata al metodo OnItemsChanged.
Nella chiamata a questo metodo si include il numero di modifiche segnalate e una matrice di strutture SEARCH_ITEM_CHANGE. Viene restituita una matrice di DocId assegnati dall'indicizzatore che rappresentano ogni modifica, nonché una matrice di codici di completamento HR che indicano se ogni URL è stato accettato per l'indicizzazione. Questo è il riconoscimento dell'indicizzatore che ha ricevuto le notifiche e sta preparando l'indicizzazione degli elementi.
Da quel punto in poi l'indicizzatore invia gli aggiornamenti usando l'interfaccia ISearchNotifyInlineSite.
ISearchNotifyInlineSite
Per ottenere aggiornamenti sullo stato degli elementi e del catalogo, è necessario registrare l'interfaccia ISearchNotifyInlineSite con l'indicizzatore in modo da poter inviare i callback. Ogni aggiornamento inviato tramite ISearchNotifyInlineSite::OnItemIndexedStatusChange identifica gli elementi in base a DocId, lo stato di ogni elemento (SEARCH_ITEM_INDEXING_STATUS) e la fase di indicizzazione (SEARCH_INDEXING_PHASE) in cui si trovano gli elementi.
Non solo si ricevono aggiornamenti sullo stato di ogni elemento, come descritto in precedenza, si ottengono anche informazioni importanti sullo stato del catalogo stesso. Il servizio Windows Search può essere interrotto o riavviato dall'utente finale, da un'applicazione di terze parti o da un altro errore. In questo caso, è necessario un modo per determinare quali notifiche inviare all'indicizzatore.
Il metodo ISearchNotifyInlineSite::OnCatalogStatusChange, chiamato dal servizio Windows Search, informa i client sullo stato del catalogo usando i parametri descritti nella tabella seguente.
Parametro | Descrizione |
---|---|
firmaRipristinoCatalogoGUID | GUID che rappresenta la reimpostazione del catalogo. Se questo GUID cambia, tutte le notifiche devono essere reinviate. |
guidCheckPointSignature | Il GUID che rappresenta l'ultimo punto di controllo ripristinato. Se questo GUID cambia, tutte le notifiche accumulate dopo l'ultimo checkpoint salvato devono essere reinviate. |
NumeroUltimoPuntoDiControllo | Numero che indica l'ultimo checkpoint salvato. |
Quando si verifica un checkpoint del catalogo, il servizio di ricerca aggiorna il dwLastCheckPointNumbere tutte le notifiche inviate prima di tale checkpoint sono sicure e recuperabili in caso di errore del servizio. I provider di notifiche devono tenere traccia solo di tali notifiche inviate tra checkpoint e riush in caso di ripristino o reimpostazione del catalogo.
Se si verifica un ripristino del catalogo, il servizio di ricerca esegue il rollback del catalogo all'ultimo checkpoint salvato e aggiorna il guidCheckPointSignature. In questo caso, i provider di notifiche devono ripetere tutte le notifiche accumulate dall'ultimo checkpoint salvato identificato dal dwLastCheckPointNumber.
Se si verifica una reimpostazione del catalogo, il servizio di ricerca reimposta l'intero catalogo e aggiorna il guidCatalogResetSignature. Il provider di notifiche deve ripubblicare l'intero ambito di scansione.
Risorse aggiuntive
- Per una panoramica del processo di indicizzazione, vedere Processo di indicizzazione.
- Per le panoramiche di Gestione cataloghi e Gestione ricerca catalogo, vedere Utilizzo del Gestore del Catalogo e Utilizzo del Gestore di Ambito della Scansione.
- Per informazioni sulla creazione di un archivio dati Shell, vedere Implementazione delle interfacce degli oggetti cartella di base.
Argomenti correlati
-
Concettuale
-
esempio di codice : estensioni della shell per i gestori di protocollo
-
l'installazione e la registrazione dei gestori di protocollo
-
Creazione di un connettore di ricerca per un gestore di protocolli