Notificación del índice de cambios (Windows Search)

Mediante el uso de los componentes de las API de notificación puede notificar al indexador que se ha cambiado, movido o eliminado un elemento y puede agregar ámbitos de búsqueda a la cola del indexador de Windows Search de direcciones URL que requieren indexación.

Los componentes pueden notificar al indexador de Windows Search que los datos de su almacén han cambiado. Normalmente, puede confiar en los rastreos programados del indexador. Sin embargo, proporcionar notificaciones al indexador puede mejorar el rendimiento asegurándose de que el indexador no rastrea todo el almacén en índices incrementales. Por ejemplo, esto podría recomendarse si espera que el almacén de datos sea excepcionalmente grande o excepcionalmente ocupado, como un almacén de datos de correo electrónico, por ejemplo.

Implementación de notificaciones administradas por indexador

Las notificaciones administradas por el indexador le permiten controlar el acceso al almacén de datos mientras le liberan de mantener la cola de notificaciones en todo el proceso de indexación. El proveedor de notificaciones debe supervisar los cambios en el almacén de datos y crear una cola de notificaciones. Periódicamente, el proveedor envía un lote de notificaciones de cambio al indexador. Cuando el indexador recibe las notificaciones, devuelve una confirmación y puede quitar los elementos de la cola. Si después de un período de tiempo no recibe una confirmación, puede volver a enviar las notificaciones. En caso de error, el indexador vuelve a generar su cola interna de elementos para rastrear o realiza un rastreo incremental del almacén.

Para implementar notificaciones administradas por el indexador, debe implementar lo siguiente:

Cola de notificaciones

Debe supervisar y poner en cola todos los cambios en el almacén de datos para enviarlos al indexador como una notificación. Cuántas notificaciones pone en cola y con qué frecuencia los envía al indexador depende de sus circunstancias. Quizá envíe un lote de notificaciones para cada n número de cambios o después de un intervalo de tiempo t o una combinación de los dos.

El indexador espera que las notificaciones aparezcan en una matriz de estructuras de SEARCH_ITEM_PERSISTENT_CHANGE , por lo que puede optar por implementar la cola de forma similar.

ISearchPersistentItemsChangedSink

Para acceder a esta interfaz, primero se crea una instancia de un objeto ISearchManager para obtener acceso a un objeto ISearchCatalogManager . Desde ese objeto ISearchCatalogManager , se crea una instancia de un objeto ISearchPersistentItemsChangedSink y se notifica al indexador de los cambios de datos con una llamada al método OnItemsChanged .

En la llamada a este método, se incluye el número de cambios que se notifican y una matriz de estructuras SEARCH_ITEM_PERSISTENT_CHANGE . Obtiene una matriz de códigos de finalización de RR. HH. que indica si se aceptó cada dirección URL para la indexación. Esta es la confirmación del indexador.

Implementación de notificaciones administradas por el proveedor

Las notificaciones administradas por el proveedor permiten controlar el acceso al almacén de datos y supervisar el progreso del indexador a medida que actualiza el catálogo de Windows Search. El proveedor debe supervisar los cambios en el almacén de datos y crear una cola de notificaciones. Periódicamente, el proveedor envía un lote de notificaciones de cambio al indexador. Cuando el indexador recibe las notificaciones, devuelve una confirmación. Si después de un período de tiempo no recibe una confirmación, puede volver a enviar las notificaciones. A medida que el indexador rastrea el almacén de datos y actualiza el catálogo de Windows Search, notifica al proveedor de cada actualización de catálogo y puede quitar los elementos de la cola. El proveedor mantiene su cola de notificaciones a lo largo de este proceso para que, en caso de error, pueda volver a enviar notificaciones al indexador.

Para implementar notificaciones administradas por el proveedor, debe implementar lo siguiente:

Cola de notificaciones

Debe supervisar y poner en cola todos los cambios en el almacén de datos para enviarlos al indexador como una notificación. Cuántas notificaciones pone en cola y con qué frecuencia los envía al indexador depende de sus circunstancias. Quizá envíe un lote de notificaciones para cada n número de cambios o después de un intervalo de tiempo t o una combinación de los dos.

El indexador espera que las notificaciones aparezcan en una matriz de estructuras de SEARCH_ITEM_CHANGE , por lo que puede optar por almacenar información de cambios de forma similar. Sin embargo, también debe poder hacer coincidir las notificaciones que envía con las confirmaciones y actualizaciones devueltas por el indexador. También puede detectar cuánto tiempo se tarda en recibir confirmaciones, por lo que puede decidir si desea volver a enviar notificaciones.

ISearchItemsChangedSink

Para acceder a esta interfaz, primero se crea una instancia de un objeto ISearchManager para obtener acceso a un objeto ISearchCatalogManager . Desde ese objeto ISearchCatalogManager , se crea una instancia de un objeto ISearchItemsChangedSink y se notifica al indexador de los cambios de datos con una llamada al método OnItemsChanged .

En la llamada a este método, se incluye el número de cambios que se notifican y una matriz de estructuras de SEARCH_ITEM_CHANGE . Obtiene una matriz de DocIds asignados por el indexador que representan cada cambio, así como una matriz de códigos de finalización de RR. HH. que indican si se aceptó cada dirección URL para la indexación. Esta es la confirmación del indexador de que ha recibido las notificaciones y se está preparando para indexar los elementos.

Desde ese punto, el indexador envía actualizaciones mediante la interfaz ISearchNotifyInlineSite .

ISearchNotifyInlineSite

Para obtener actualizaciones sobre el estado de los elementos y el catálogo, debe registrar la interfaz ISearchNotifyInlineSite con el indexador para que pueda enviar devoluciones de llamada. Cada actualización enviada mediante ISearchNotifyInlineSite::OnItemIndexedStatusChange identifica los elementos por DocId, el estado de cada elemento (SEARCH_ITEM_INDEXING_STATUS) y la fase de indexación (SEARCH_INDEXING_PHASE) en que se encuentran los elementos.

No solo recibe actualizaciones sobre el estado de cada elemento, como se ha descrito anteriormente, también obtendrá información importante sobre el estado del propio catálogo. El usuario final puede interrumpir o reiniciar el servicio Search de Windows, una aplicación de terceros o algún otro error. Cuando esto sucede, necesita una manera de determinar qué notificaciones se deben volver a utilizar en el indexador.

El método ISearchNotifyInlineSite::OnCatalogStatusChange, llamado por el servicio Search de Windows, informa a los clientes sobre el estado del catálogo mediante los parámetros descritos en la tabla siguiente.

Parámetro Descripción
guidCatalogResetSignature GUID que representa el restablecimiento del catálogo. Si cambia este GUID, todas las notificaciones se deben volver a sangr.
guidCheckPointSignature GUID que representa el último punto de control restaurado. Si este GUID cambia, se deben reenviar todas las notificaciones acumuladas desde el último punto de control guardado.
dwLastCheckPointNumber Número que indica el último punto de control guardado.

 

 

Cuando se produce un punto de control de catálogo, el servicio de búsqueda actualiza dwLastCheckPointNumber y todas las notificaciones enviadas antes de ese punto de control son seguras y recuperables en caso de error de servicio. Los proveedores de notificaciones solo deben realizar un seguimiento de las notificaciones enviadas entre puntos de control y repush en caso de una restauración o restablecimiento del catálogo.

Si se produce una restauración de catálogo, el servicio de búsqueda revierte el catálogo al último punto de control guardado y actualiza guidCheckPointSignature. En esta situación, los proveedores de notificaciones deben volver a mostrar todas las notificaciones acumuladas desde el punto de control guardado más reciente, tal como se identifica en dwLastCheckPointNumber.

Si se debe producir un restablecimiento del catálogo, el servicio de búsqueda restablece todo el catálogo y actualiza guidCatalogResetSignature. El proveedor de notificaciones debe volver a silenciar todo su ámbito de rastreo.

Recursos adicionales

Conceptual

Desarrollo de controladores de protocolo

Descripción de los controladores de protocolo

Agregar iconos y menús contextuales

Ejemplo de código: Extensiones de shell para controladores de protocolo

Instalación y registro de controladores de protocolo

Creación de un conector de búsqueda para un controlador de protocolo

Controladores de protocolo de depuración