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
- Implementando notificações gerenciadas pelo provedor
- Recursos adicionais
- Tópicos relacionados
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:
- Um mecanismo para monitorar alterações no armazenamento de dados.
- Uma estrutura de dados para enfileirar informações (várias estruturas de SEARCH_ITEM_PERSISTENT_CHANGE ) sobre essas alterações.
- Interface ISearchPersistentItemsChangedSink para enviar suas notificações ao indexador e obter confirmações de notificação do indexador.
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:
- Um mecanismo para monitorar alterações no armazenamento de dados.
- Uma estrutura de dados para enfileirar informações (várias estruturas de SEARCH_ITEM_CHANGE ) sobre essas alterações.
- Interface ISearchItemsChangedSink para enviar suas notificações ao indexador e obter confirmações de notificação do indexador.
- Interface ISearchNotifyInlineSite para receber atualizações sobre o status de indexação.
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
- Para obter uma visão geral do processo de indexação, consulte O processo de indexação.
- Para obter visões gerais do Gerenciador de Catálogos e do CSM (Gerenciador de Pesquisa de Catálogo), consulte Usando o Gerenciador de Catálogos e Usando o Gerenciador de Escopo de Rastreamento.
- Para obter informações sobre como criar um armazenamento de dados do Shell, consulte Implementando as interfaces básicas de objeto de pasta.
Tópicos relacionados
-
Conceitual
-
Exemplo de código: extensões de shell para manipuladores de protocolo
-
Criando um conector de pesquisa para um manipulador de protocolo