Notificando o índice de alterações (Pesquisa do Windows)

Usando as APIs de notificação, os componentes podem notificar o indexador de que um item foi alterado, movido ou excluído e pode adicionar escopos de pesquisa à fila de URLs do indexador do Windows Search que exigem indexação.

Os componentes podem notificar o indexador do Windows Search de que os dados em seu repositório foram alterados. Normalmente, você pode contar com os rastreamentos agendados do indexador. No entanto, fornecer notificações ao indexador pode melhorar o desempenho, garantindo que o indexador não rastreie todo o repositório em índices incrementais. Por exemplo, isso pode ser recomendado se você espera que seu armazenamento de dados seja excepcionalmente grande e/ou excepcionalmente ocupado, como um armazenamento de dados de email, por exemplo.

Implementando notificações gerenciadas pelo indexador

As notificações gerenciadas pelo indexador permitem que você controle o acesso ao armazenamento de dados enquanto libera a manutenção da fila de notificações durante todo o processo de indexação. Seu provedor de notificações deve monitorar as alterações no armazenamento de dados e criar uma fila de notificações. Periodicamente, seu provedor envia um lote de notificações de alteração para o indexador. Quando o indexador recebe suas notificações, ele retorna uma confirmação e você pode remover os itens da fila. Se, após um período de tempo, você não receber uma confirmação, poderá enviar as notificações novamente. Em caso de falha, o indexador recompila sua fila interna de itens para rastrear ou executa um rastreamento incremental do repositório.

Para implementar notificações gerenciadas pelo indexador, você precisa implementar o seguinte:

Fila de Notificações

Você precisa monitorar e enfileirar todas as alterações no armazenamento de dados para enviar ao indexador como uma notificação. Quantas notificações você enfileira e com que frequência as envia para o indexador dependem de sua circunstância. Talvez você envie um lote de notificações para cada n número de alterações ou após algum intervalo de tempo t ou uma combinação das duas.

O indexador espera que as notificações venham em uma matriz de estruturas SEARCH_ITEM_PERSISTENT_CHANGE , portanto, você pode optar por implementar sua fila da mesma forma.

ISearchPersistentItemsChangedSink

Para acessar essa interface, primeiro você cria uma instância de um objeto ISearchManager para obter acesso a um objeto ISearchCatalogManager . Desse objeto ISearchCatalogManager , você cria uma instância de um objeto ISearchPersistentItemsChangedSink e notifica o indexador das alterações de dados com uma chamada para o método OnItemsChanged .

Na chamada para esse método, você inclui o número de alterações que estão sendo relatadas e uma matriz de estruturas SEARCH_ITEM_PERSISTENT_CHANGE . Você recebe de volta uma matriz de códigos de conclusão de RH indicando se cada URL foi aceita para indexação. Essa é a sua confirmação do indexador.

Implementando notificações gerenciadas pelo provedor

As notificações gerenciadas pelo provedor permitem controlar o acesso ao armazenamento de dados e monitorar o progresso do indexador conforme ele atualiza o catálogo do Windows Search. Seu provedor deve monitorar as alterações no armazenamento de dados e criar uma fila de notificações. Periodicamente, seu provedor envia um lote de notificações de alteração para o indexador. Quando o indexador recebe suas notificações, ele retorna uma confirmação. Se, após um período de tempo, você não receber uma confirmação, poderá enviar as notificações novamente. À medida que o indexador rastreia o armazenamento de dados e atualiza o catálogo do Windows Search, ele notifica o provedor de cada atualização de catálogo e você pode remover os itens da fila. Seu provedor mantém sua fila de notificação durante todo esse processo para que, em caso de falha, você possa reenviar notificações ao indexador.

Para implementar notificações gerenciadas pelo provedor, você precisa implementar o seguinte:

Fila de Notificações

Você precisa monitorar e enfileirar todas as alterações no armazenamento de dados para enviar ao indexador como uma notificação. Quantas notificações você enfileira e com que frequência as envia para o indexador dependem de sua circunstância. Talvez você envie um lote de notificações para cada n número de alterações ou após algum intervalo de tempo t ou uma combinação das duas.

O indexador espera que as notificações venham em uma matriz de estruturas SEARCH_ITEM_CHANGE , portanto, você pode optar por armazenar informações de alteração da mesma forma. No entanto, você também precisa ser capaz de corresponder às notificações enviadas com as confirmações e atualizações retornadas pelo indexador. Talvez você também queira detectar quanto tempo leva para obter confirmações, para que você possa decidir se/quando reenviar notificações.

ISearchItemsChangedSink

Para acessar essa interface, primeiro você cria uma instância de um objeto ISearchManager para obter acesso a um objeto ISearchCatalogManager . Nesse objeto ISearchCatalogManager , você cria uma instância de um objeto ISearchItemsChangedSink e notifica o indexador das alterações de dados com uma chamada para o método OnItemsChanged .

Na chamada para esse método, você inclui o número de alterações que estão sendo relatadas e uma matriz de estruturas SEARCH_ITEM_CHANGE . Você recebe de volta uma matriz de DocIds atribuídas pelo indexador que representam cada alteração, bem como uma matriz de códigos de conclusão de RH que indica se cada URL foi aceita para indexação. Essa é a sua confirmação do indexador de que ele recebeu suas notificações e está se preparando para indexar os itens.

Desse ponto em diante, o indexador envia atualizações usando a interface ISearchNotifyInlineSite .

ISearchNotifyInlineSite

Para obter atualizações sobre o status de seus itens e do catálogo, você deve registrar sua interface ISearchNotifyInlineSite com o indexador para que ele possa enviar retornos de chamada. Cada atualização enviada usando ISearchNotifyInlineSite::OnItemIndexedStatusChange identifica os itens por DocId, o status de cada item (SEARCH_ITEM_INDEXING_STATUS) e a fase de indexação (SEARCH_INDEXING_PHASE) em que os itens estão.

Além de receber atualizações no status de cada item, conforme descrito anteriormente, você também obtém informações importantes sobre o status do próprio catálogo. O windows serviço Pesquisa pode ser interrompido ou reiniciado pelo usuário final, um aplicativo de terceiros ou alguma outra falha. Quando isso acontece, você precisa de uma maneira de determinar quais notificações devem ser enviadas novamente para o indexador.

O método ISearchNotifyInlineSite::OnCatalogStatusChange, chamado pelo windows serviço Pesquisa, informa os clientes sobre o status do catálogo usando os parâmetros descritos na tabela a seguir.

Parâmetro Descrição
guidCatalogResetSignature Um GUID que representa a redefinição de catálogo. Se esse GUID for alterado, todas as notificações deverão ser ressentidas.
guidCheckPointSignature Um GUID que representa o último ponto de verificação restaurado. Se esse GUID for alterado, todas as notificações acumuladas desde o último ponto de verificação salvo deverão ser reenviadas.
dwLastCheckPointNumber Um número que indica o último ponto de verificação salvo.

 

 

Quando ocorre um ponto de verificação de catálogo, o serviço de pesquisa atualiza o dwLastCheckPointNumber e todas as notificações enviadas antes desse ponto de verificação são seguras e recuperáveis em caso de falha de serviço. Os provedores de notificações precisam acompanhar apenas as notificações enviadas entre pontos de verificação e repush no caso de uma restauração ou redefinição de catálogo.

Se ocorrer uma restauração de catálogo, o serviço de pesquisa reverterá o catálogo para o último ponto de verificação salvo e atualizará o guidCheckPointSignature. Nessa situação, os provedores de notificações devem substituir todas as notificações acumuladas desde o ponto de verificação salvo mais recente, conforme identificado pelo dwLastCheckPointNumber.

Se uma redefinição de catálogo deve ocorrer, o serviço de pesquisa redefine todo o catálogo e atualiza guidCatalogResetSignature. O provedor de notificações deve retomar todo o escopo de rastreamento novamente.

Recursos adicionais

Conceitual

Desenvolvendo manipuladores de protocolo

Noções básicas sobre manipuladores de protocolo

Adicionando ícones e menus de contexto

Exemplo de código: extensões de shell para manipuladores de protocolo

Instalando e registrando manipuladores de protocolo

Criando um conector de pesquisa para um manipulador de protocolo

Manipuladores de protocolo de depuração