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
- Implementación de notificaciones administradas por el proveedor
- Recursos adicionales
- Temas relacionados
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:
- Un mecanismo para supervisar los cambios en el almacén de datos.
- Estructura de datos para poner en cola información (varias estructuras de SEARCH_ITEM_PERSISTENT_CHANGE ) sobre esos cambios.
- Interfaz ISearchPersistentItemsChangedSink para enviar las notificaciones al indexador y obtener confirmaciones de notificaciones del indexador.
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:
- Un mecanismo para supervisar los cambios en el almacén de datos.
- Estructura de datos para poner en cola información (varias estructuras de SEARCH_ITEM_CHANGE ) sobre esos cambios.
- Interfaz ISearchItemsChangedSink para enviar las notificaciones al indexador y obtener confirmaciones de notificación del indexador.
- Interfaz ISearchNotifyInlineSite para recibir actualizaciones sobre el estado de la indexación.
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
- Para obtener información general sobre el proceso de indexación, consulte El proceso de indexación.
- Para obtener información general sobre el Administrador de catálogos y el Administrador de búsquedas de catálogos (CSM), consulte Uso del Administrador de catálogos y Uso del Administrador de ámbitos de rastreo.
- Para obtener información sobre cómo crear un almacén de datos de Shell, vea Implementación de las interfaces básicas de objetos de carpeta.
Temas relacionados
-
Conceptual
-
Ejemplo de código: Extensiones de shell para controladores de protocolo
-
Creación de un conector de búsqueda para un controlador de protocolo