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 degli URL di Windows Search che richiedono l'indicizzazione.
I componenti possono notificare all'indicizzatore di Windows Search che i dati nell'archivio sono stati modificati. In genere, è possibile basarsi sulle ricerche per indicizzazione pianificate dell'indicizzatore. Tuttavia, fornendo notifiche all'indicizzatore può migliorare le prestazioni assicurando che l'indicizzatore non esegue la ricerca per indicizzazione dell'intero archivio negli indici incrementali. Ad esempio, questo potrebbe essere consigliato se si prevede che l'archivio dati sia eccezionalemente grande e/o eccezionalemente occupato, ad esempio un archivio dati di posta elettronica.
- Implementazione delle notifiche gestite da Indexer
- Implementazione di notifiche gestite dal provider
- Risorse aggiuntive
- Argomenti correlati
Implementazione delle notifiche gestite da Indexer
Le notifiche gestite dall'indicizzatore consentono di controllare l'accesso all'archivio dati, liberando l'utente di mantenere la coda delle notifiche nell'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 al indicizzatore. Quando l'indicizzatore riceve le notifiche, restituisce un riconoscimento ed è possibile rimuovere gli elementi dalla coda. Se dopo un periodo di tempo non si riceve un riconoscimento, è possibile inviare nuovamente le notifiche. In caso di errore, l'indicizzatore ricompila la coda interna di elementi per indicizzazione o esegue una ricerca per indicizzazione incrementale dell'archivio.
Per implementare le notifiche gestite dall'indicizzatore, è necessario implementare quanto segue:
- Meccanismo per il monitoraggio delle modifiche nell'archivio dati.
- Struttura di dati per accodare informazioni (più strutture SEARCH_ITEM_PERSISTENT_CHANGE ) su tali modifiche.
- Interfaccia ISearchPersistentItemsChangedSink per inviare le notifiche all'indicizzatore e per ottenere i riconoscimenti di notifica dall'indicizzatore.
Coda notifiche
È necessario monitorare e accodare ogni modifica nell'archivio dati per inviare all'indicizzatore come notifica. Il numero di notifiche che si accoda e la frequenza di invio all'indicizzatore dipende dalla circostanza. È possibile inviare un batch di notifiche per ogni numero n di modifiche o dopo un intervallo di tempo o una combinazione dei due.
L'indicizzatore prevede che le notifiche vengano visualizzate in una matrice di strutture SEARCH_ITEM_PERSISTENT_CHANGE , quindi è 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 . Dall'oggetto ISearchCatalogManager viene creata un'istanza di un oggetto ISearchPersistentItemsChangedSink e si invia una notifica all'indicizzatore delle modifiche ai 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 indicano se ogni URL è stato accettato per l'indicizzazione. Questo è il riconoscimento dell'indicizzatore.
Implementazione di 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 man mano che aggiorna il 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 al indicizzatore. Quando l'indicizzatore riceve le notifiche, restituisce un riconoscimento. Se dopo un periodo di tempo non si riceve un riconoscimento, è possibile inviare nuovamente le notifiche. Quando l'indicizzatore esegue la ricerca per indicizzazione dell'archivio dati e aggiorna il catalogo di Windows Search, notifica al provider di ogni aggiornamento del catalogo e può rimuovere gli elementi dalla coda. Il provider gestisce la coda di notifica in questo processo in modo che, in caso di errore, è possibile inviare nuovamente le notifiche all'indicizzatore.
Per implementare le notifiche gestite dal provider, è necessario implementare quanto segue:
- Meccanismo per il monitoraggio delle modifiche nell'archivio dati.
- Struttura di dati per accodare informazioni (più strutture SEARCH_ITEM_CHANGE ) su tali modifiche.
- Interfaccia ISearchItemsChangedSink per inviare le notifiche all'indicizzatore e per ottenere i riconoscimenti di notifica dall'indicizzatore.
- Interfaccia ISearchNotifyInlineSite per ricevere aggiornamenti sullo stato dell'indicizzazione.
Coda notifiche
È necessario monitorare e accodare ogni modifica nell'archivio dati per inviare all'indicizzatore come notifica. Il numero di notifiche che si accoda e la frequenza di invio all'indicizzatore dipende dalla circostanza. È possibile inviare un batch di notifiche per ogni numero n di modifiche o dopo un intervallo di tempo o una combinazione dei due.
L'indicizzatore prevede che le notifiche vengano visualizzate in una matrice di strutture SEARCH_ITEM_CHANGE , quindi è possibile scegliere di archiviare le informazioni sulle modifiche in modo analogo. Tuttavia, è anche necessario essere in grado di corrispondere alle notifiche inviate con i riconoscimenti e gli aggiornamenti restituiti dal indicizzatore. È anche possibile essere in grado di rilevare il tempo necessario per ottenere i 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 invia una notifica all'indicizzatore delle modifiche ai 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 e 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 per indicizzare gli elementi.
Da questo punto in avanti l'indicizzatore invia 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 che possa inviare callback. Ogni aggiornamento inviato tramite ISearchNotifyInlineSite::OnItemIndexedStatusChange identifica gli elementi da 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 di ricerca windows può essere interrotto o riavviato dall'utente finale, da un'applicazione di terze parti o da un altro errore. In questo caso, è necessario determinare le notifiche da eseguire con l'indicizzatore.
Il metodo ISearchNotifyInlineSite::OnCatalogStatusChange, chiamato dal servizio di ricerca di Windows, informa i client sullo stato del catalogo usando i parametri descritti nella tabella seguente.
Parametro | Descrizione |
---|---|
guidCatalogResetSignature | GUID che rappresenta la reimpostazione del catalogo. Se questo GUID viene modificato, tutte le notifiche devono essere reinviate. |
guidCheckPointSignature | GUID che rappresenta l'ultimo checkpoint ripristinato. Se questo GUID cambia, tutte le notifiche accumulate dopo l'ultimo checkpoint salvato devono essere riaffidate. |
dwLastCheckPointNumber | Numero che indica l'ultimo checkpoint salvato. |
Quando si verifica un checkpoint del catalogo, il servizio di ricerca aggiorna dwLastCheckPointNumber e tutte le notifiche inviate prima del 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 nell'ultimo checkpoint salvato e aggiorna il guidCheckPointSignature. In questo caso, i provider di notifiche devono riscrivare tutte le notifiche accumulate poiché il checkpoint salvato più recente è identificato dal dwLastCheckPointNumber.
Se deve verificarsi una reimpostazione del catalogo, il servizio di ricerca reimposta l'intero catalogo e aggiorna il guidCatalogResetSignature. Il provider di notifiche deve rimettere in silenzio l'intero ambito di ricerca per indicizzazione.
Risorse aggiuntive
- Per una panoramica del processo di indicizzazione, vedere Processo di indicizzazione.
- Per le panoramica di Gestione catalogo e Gestione ricerche catalogo (CSM), vedere Uso di Gestione catalogo e Uso di Gestione ambito ricerca per indicizzazione.
- Per informazioni sulla creazione di un archivio dati shell, vedere Implementazione delle interfacce degli oggetti cartelle di base.
Argomenti correlati
-
Informazioni concettuali
-
Esempio di codice: estensioni shell per gestori di protocolli
-
Creazione di un connettore di ricerca per un gestore del protocollo