Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
С помощью компонентов API уведомлений индексатор может уведомить индексатора о том, что элемент был изменен, перемещен или удален и может добавлять области поиска в очередь индексатора Windows Search URL-адресов, требующих индексирования.
Компоненты могут уведомлять индексатор поиска Windows о том, что данные в их хранилище изменились. Как правило, можно полагаться на запланированные сканирования индексатора. Однако предоставление уведомлений индексатору может повысить производительность, гарантируя, что индексатор не выполняет обход всего хранилища по добавочным индексам. Например, это может быть рекомендуемо, если вы ожидаете, что хранилище данных будет исключительно большим и (или) исключительно занято, например хранилище данных электронной почты.
- Реализация управляемых индексатором уведомлений
- Реализация уведомлений, управляемых поставщиком
- Дополнительные ресурсы
- Сопутствующие темы
Реализация управляемых индексатором уведомлений
Уведомления, управляемые индексатором, позволяют управлять доступом к хранилищу данных при освобождении очереди уведомлений на протяжении всего процесса индексирования. Поставщик уведомлений должен отслеживать изменения в хранилище данных и создавать очередь уведомлений. Периодически поставщик отправляет пакет уведомлений об изменениях индексатору. Когда индексатор получает уведомления, он возвращает подтверждение и вы можете удалить элементы из очереди. Если через период времени вы не получаете подтверждение, вы можете повторно отправить уведомления. В случае сбоя индексатор перестраивает свою внутреннюю очередь элементов для индексирования или выполняет инкрементальный обход хранилища.
Чтобы реализовать уведомления, управляемые индексатором, необходимо реализовать следующее:
- Механизм мониторинга изменений в хранилище данных.
- Структура данных для очереди сведений (несколько структур данных SEARCH_ITEM_PERSISTENT_CHANGE) об этих изменениях.
- Интерфейс ISearchPersistentItemsChangedSink для отправки уведомлений индексатору и получения подтверждения уведомлений от индексатора.
Очередь уведомлений
Необходимо отслеживать и ставить в очередь все изменения в хранилище данных, чтобы отправить индексатору в качестве уведомления. Сколько уведомлений вы помещаете в очередь и сколько часто отправляете их индексатору, зависит от ваших обстоятельств. Возможно, вы отправляете пакет уведомлений для каждого n числа изменений или после некоторого интервала времени или комбинации двух.
Индексатор ожидает, что уведомления будут поступать в массив структур SEARCH_ITEM_PERSISTENT_CHANGE , поэтому вы можете реализовать очередь аналогичным образом.
ISearchPersistentItemsChangedSink
Чтобы получить доступ к этому интерфейсу, сначала создайте экземпляр объекта ISearchManager для получения доступа к объекту ISearchCatalogManager . Из этого объекта ISearchCatalogManager создается экземпляр объекта ISearchPersistentItemsChangedSink и уведомляет индексатор изменений данных с помощью вызова метода OnItemsChanged .
В вызове этого метода вы включаете количество сообщаемых изменений и массив структур SEARCH_ITEM_PERSISTENT_CHANGE . Возвращается массив кодов завершения HTTP, указывающий, был ли принят каждый URL-адрес для индексирования. Это подтверждение от индексатора.
Реализация уведомлений, управляемых поставщиком
Управляемые поставщиком уведомления позволяют управлять доступом к хранилищу данных и отслеживать ход выполнения индексатора по мере обновления каталога поиска Windows. Поставщик должен отслеживать изменения в хранилище данных и создавать очередь уведомлений. Периодически поставщик отправляет пакет уведомлений об изменениях индексатору. Когда индексатор получает уведомления, он возвращает подтверждение. Если через период времени вы не получаете подтверждение, вы можете повторно отправить уведомления. По мере того, как индексатор обходит хранилище данных и обновляет каталог Windows Search, он уведомляет вашего поставщика о каждом обновлении каталога, и вы можете удалить элементы из своей очереди. Поставщик сохраняет свою очередь уведомлений в рамках этого процесса, чтобы в случае сбоя вы можете повторно отправить уведомления индексатору.
Чтобы реализовать уведомления, управляемые поставщиком, необходимо реализовать следующее:
- Механизм мониторинга изменений в хранилище данных.
- Структура данных для организации сведений (несколько структур SEARCH_ITEM_CHANGE) о таких изменениях.
- Интерфейс ISearchItemsChangedSink для отправки уведомлений индексатору и получения уведомлений от индексатора.
- Интерфейс ISearchNotifyInlineSite для получения обновлений о состоянии индексирования.
Очередь уведомлений
Необходимо отслеживать и ставить в очередь все изменения в хранилище данных, чтобы отправить индексатору в качестве уведомления. Сколько уведомлений вы помещаете в очередь и сколько часто отправляете их индексатору, зависит от ваших обстоятельств. Возможно, вы отправляете пакет уведомлений для каждого n числа изменений или после некоторого интервала времени или комбинации двух.
Индексатор ожидает, что уведомления будут поступать в массив структур SEARCH_ITEM_CHANGE , поэтому вы можете сохранить сведения об изменении аналогично. Однако также необходимо иметь возможность сопоставить уведомления, которые вы отправляете, с подтверждениями и обновлениями, возвращаемыми индексатором. Вы также можете определить, сколько времени требуется для получения подтверждений, поэтому вы можете решить, следует ли или когда повторно отправлять уведомления.
ISearchItemsChangedSink
Чтобы получить доступ к этому интерфейсу, сначала создайте экземпляр объекта ISearchManager для получения доступа к объекту ISearchCatalogManager . Из этого объекта ISearchCatalogManager создается экземпляр объекта ISearchItemsChangedSink и уведомляет индексатор изменений данных с помощью вызова метода OnItemsChanged .
В вызове этого метода вы включаете число сообщаемых изменений и массив структур SEARCH_ITEM_CHANGE. Возвращается массив назначенных индексатором DocIds, представляющих каждое изменение, а также массив HR-кодов завершения, указывающих, был ли принят каждый URL-адрес для индексирования. Это ваше подтверждение о получении от индексатора, что он получил ваши уведомления и готовится индексировать элементы.
С этого момента индексатор отправляет обновления с помощью интерфейса ISearchNotifyInlineSite .
ISearchNotifyInlineSite
Чтобы получать обновления о состоянии ваших элементов и каталога, необходимо зарегистрировать интерфейс ISearchNotifyInlineSite в индексаторе, чтобы он мог отправлять вам обратные вызовы. Каждое обновление, отправленное с помощью ISearchNotifyInlineSite::OnItemIndexedStatusChange, определяет элементы по DocId, состояние каждого элемента (SEARCH_ITEM_INDEXING_STATUS) и этап индексирования элементов (SEARCH_INDEXING_PHASE).
Кроме того, вы получаете обновления о состоянии каждого элемента, как описано ранее, вы также получаете важные сведения о состоянии самого каталога. Служба поиска Windows может быть прервана или перезапущена конечным пользователем, сторонним приложением или другим сбоем. Когда это произойдет, вам потребуется способ определить, какие уведомления следует повторно отправить индексатору.
Метод ISearchNotifyInlineSite::OnCatalogStatusChange , вызываемый службой поиска Windows, сообщает клиентам о состоянии каталога с помощью параметров, описанных в следующей таблице.
| Параметр | Description |
|---|---|
| guidCatalogResetSignature | GUID, представляющий сброс каталога. Если этот GUID изменится, все уведомления необходимо отправить заново. |
| guidCheckPointSignature | GUID, представляющий последнюю восстановленную контрольную точку. Если этот GUID изменится, все уведомления, накопленные с момента последней сохраненной контрольной точки, должны быть высланы повторно. |
| Последний номер контрольной точки (dwLastCheckPointNumber) | Число, указывающее последнюю сохраненную контрольную точку. |
При возникновении контрольной точки каталога служба поиска обновляет dwLastCheckPointNumber, а все уведомления, отправленные до этой контрольной точки, безопасны и восстанавливаются в случае сбоя службы. Поставщики уведомлений должны отслеживать только те уведомления, которые отправляются между контрольными точками, и повторно отправлять их в случае восстановления или сброса каталога.
Если происходит восстановление каталога, служба поиска откатит каталог до последней сохраненной контрольной точки и обновляет guidCheckPointSignature. В этой ситуации поставщики уведомлений должны повторно отправить все уведомления, накопленные с момента последней сохраненной контрольной точки, как определено dwLastCheckPointNumber.
Если должен произойти сброс каталога, служба поиска сбрасывает весь каталог и обновляет guidCatalogResetSignature. Поставщик уведомлений должен повторно открепить всю область обхода.
Дополнительные ресурсы
- Общие сведения о процессе индексирования см. в разделе "Процесс индексирования".
- Общие сведения о диспетчере каталогов и диспетчере поиска каталогов (CSM) см. в разделе "Использование диспетчера каталогов " и "Использование диспетчера областей обхода".
- Сведения о создании хранилища данных оболочки см. в разделе "Реализация базовых интерфейсов объектов папок".
Связанные темы
-
Концептуальный
-
Пример кода: расширения оболочки для обработчиков протоколов