Condividi tramite


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

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:

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:

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

Informazioni concettuali

Sviluppo di gestori di protocolli

Informazioni sui gestori del protocollo

Aggiunta di icone e menu di scelta rapida

Esempio di codice: estensioni shell per gestori di protocolli

Installazione e registrazione dei gestori del protocollo

Creazione di un connettore di ricerca per un gestore del protocollo

Gestori del protocollo di debug