다음을 통해 공유


변경 내용 인덱스 알림(Windows Search)

알림 API 구성 요소를 사용하면 항목이 변경, 이동 또는 삭제되었음을 인덱서에 알릴 수 있으며 인덱싱이 필요한 Windows Search 인덱서의 URL 큐에 검색 범위를 추가할 수 있습니다.

구성 요소는 저장소의 데이터가 변경되었음을 Windows Search 인덱서에 알릴 수 있습니다. 일반적으로 인덱서의 예약된 크롤링을 사용할 수 있습니다. 그러나 인덱서에 알림을 제공하면 인덱서가 증분 인덱스에서 전체 저장소를 크롤링하지 않도록 하여 성능을 향상시킬 수 있습니다. 예를 들어 데이터 저장소가 매우 크고/또는 매우 사용량이 많은 경우(예: 전자 메일 데이터 저장소) 이 권장될 수 있습니다.

인덱서 관리 알림 구현

인덱서 관리 알림을 사용하면 전체 인덱싱 프로세스에서 알림 큐를 유지 관리할 수 있는 동시에 데이터 저장소에 대한 액세스를 제어할 수 있습니다. 알림 공급자는 데이터 저장소에 대한 변경 내용을 모니터링하고 알림 큐를 만들어야 합니다. 공급자는 정기적으로 변경 알림의 일괄 처리를 인덱서에 보냅니다. 인덱서가 알림을 받으면 승인을 반환하고 큐에서 항목을 제거할 수 있습니다. 일정 기간 후에 승인을 받지 못한 경우 알림을 다시 보낼 수 있습니다. 오류가 발생하는 경우 인덱서는 내부 항목 큐를 다시 빌드하여 크롤링하거나 저장소의 증분 크롤링을 수행합니다.

인덱서 관리 알림을 구현하려면 다음을 구현해야 합니다.

  • 데이터 저장소의 변경 내용을 모니터링하는 메커니즘입니다.
  • 이러한 변경 내용에 대한 정보(여러 SEARCH_ITEM_PERSISTENT_CHANGE 구조)를 큐에 대기하는 데이터 구조입니다.
  • ISearchPersistentItemsChangedSink 인터페이스는 인덱서에 알림을 보내고 인덱서에서 알림 승인을 가져옵니다.

알림 큐

인덱서에 알림으로 보내려면 데이터 저장소의 모든 변경 내용을 모니터링하고 큐에 대기해야 합니다. 큐에 대기 중인 알림 수와 인덱서로 보내는 빈도는 상황에 따라 달라집니다. n 개 변경 횟수 또는 t 시간 간격 후 또는 둘의 조합에 대한 알림 일괄 처리를 보낼 수 있습니다.

인덱서는 알림이 SEARCH_ITEM_PERSISTENT_CHANGE 구조의 배열로 표시되므로 큐를 유사하게 구현하도록 선택할 수 있습니다.

ISearchPersistentItemsChangedSink

이 인터페이스에 액세스하려면 먼저 ISearchManager 개체를 인스턴스화하여 ISearchCatalogManager 개체에 대한 액세스 권한을 얻습니다. ISearchCatalogManager 개체에서 ISearchPersistentItemsChangedSink 개체를 인스턴스화하고 OnItemsChanged 메서드를 호출하여 인덱서에 데이터 변경 내용을 알립니다.

이 메서드에 대한 호출에는 보고되는 변경 내용 수와 SEARCH_ITEM_PERSISTENT_CHANGE 구조체의 배열이 포함됩니다. 각 URL이 인덱싱에 허용되었는지 여부를 나타내는 HR 완료 코드 배열을 다시 가져옵니다. 인덱서의 승인입니다.

공급자 관리 알림 구현

공급자 관리 알림을 사용하면 데이터 저장소에 대한 액세스를 제어하고 Windows Search 카탈로그를 업데이트할 때 인덱서의 진행률을 모니터링할 수 있습니다. 공급자는 데이터 저장소에 대한 변경 내용을 모니터링하고 알림 큐를 만들어야 합니다. 공급자는 정기적으로 변경 알림의 일괄 처리를 인덱서에 보냅니다. 인덱서가 알림을 받으면 승인을 반환합니다. 일정 기간 후에 승인을 받지 못한 경우 알림을 다시 보낼 수 있습니다. 인덱서가 데이터 저장소를 크롤링하고 Windows Search 카탈로그를 업데이트할 때 공급자에게 각 카탈로그 업데이트를 알리고 큐에서 항목을 제거할 수 있습니다. 공급자는 실패 시 인덱서에 알림을 다시 전송할 수 있도록 이 프로세스 전체에서 알림 큐를 유지 관리합니다.

공급자 관리 알림을 구현하려면 다음을 구현해야 합니다.

  • 데이터 저장소의 변경 내용을 모니터링하는 메커니즘입니다.
  • 이러한 변경 내용에 대한 정보(여러 SEARCH_ITEM_CHANGE 구조)를 큐에 대기하는 데이터 구조입니다.
  • ISearchItemsChangedSink 인터페이스는 인덱서에 알림을 보내고 인덱서에서 알림 승인을 가져옵니다.
  • 인덱싱의 상태 대한 업데이트를 수신하는 ISearchNotifyInlineSite 인터페이스입니다.

알림 큐

인덱서에 알림으로 보내려면 데이터 저장소의 모든 변경 내용을 모니터링하고 큐에 대기해야 합니다. 큐에 대기 중인 알림 수와 인덱서로 보내는 빈도는 상황에 따라 달라집니다. n 개 변경 횟수 또는 t 시간 간격 후 또는 둘의 조합에 대한 알림 일괄 처리를 보낼 수 있습니다.

인덱서는 알림이 SEARCH_ITEM_CHANGE 구조의 배열로 표시되므로 변경 정보를 유사하게 저장하도록 선택할 수 있습니다. 그러나 인덱서에서 반환한 승인 및 업데이트와 함께 보내는 알림을 일치시킬 수도 있어야 합니다. 승인을 받는 데 걸리는 시간을 감지하여 알림을 다시 전송할지/시기를 결정할 수도 있습니다.

ISearchItemsChangedSink

이 인터페이스에 액세스하려면 먼저 ISearchManager 개체를 인스턴스화하여 ISearchCatalogManager 개체에 대한 액세스 권한을 얻습니다. ISearchCatalogManager 개체에서 ISearchItemsChangedSink 개체를 인스턴스화하고 OnItemsChanged 메서드를 호출하여 인덱서에 데이터 변경 내용을 알립니다.

이 메서드 호출에는 보고되는 변경 내용 수와 SEARCH_ITEM_CHANGE 구조체 배열이 포함됩니다. 각 변경 사항을 나타내는 인덱서 할당 DocId 배열과 각 URL이 인덱싱에 허용되었는지 여부를 나타내는 HR 완료 코드 배열을 다시 가져옵니다. 이는 인덱서가 알림을 수신하고 항목을 인덱싱할 준비를 하고 있음을 인덱서에서 승인한 것입니다.

이 시점부터 인덱서는 ISearchNotifyInlineSite 인터페이스를 사용하여 업데이트를 보냅니다.

ISearchNotifyInlineSite

항목과 카탈로그의 상태 대한 업데이트를 받으려면 콜백을 보낼 수 있도록 ISearchNotifyInlineSite 인터페이스를 인덱서에 등록해야 합니다. ISearchNotifyInlineSite::OnItemIndexedStatusChange를 사용하여 전송된 각 업데이트는 DocId, 각 항목의 상태(SEARCH_ITEM_INDEXING_STATUS) 및 항목이 있는 인덱싱 단계(SEARCH_INDEXING_PHASE)로 항목을 식별합니다.

앞에서 설명한 대로 각 항목의 상태 대한 업데이트를 받을 뿐만 아니라 카탈로그 자체의 상태 대한 중요한 정보도 얻을 수 있습니다. 최종 사용자, 타사 애플리케이션 또는 기타 오류로 인해 Windows Search Service 중단되거나 다시 시작될 수 있습니다. 이 경우 인덱서에 다시 사용할 알림을 확인하는 방법이 필요합니다.

Windows Search Service 호출된 ISearchNotifyInlineSite::OnCatalogStatusChange 메서드는 다음 표에 설명된 매개 변수를 사용하여 카탈로그의 상태 대해 클라이언트에 알립니다.

매개 변수 설명
guidCatalogResetSignature 카탈로그 재설정을 나타내는 GUID입니다. 이 GUID가 변경되면 모든 알림을 다시 전송해야 합니다.
guidCheckPointSignature 복원된 마지막 검사점의 GUID입니다. 이 GUID가 변경되면 마지막으로 저장된 검사점 이후 누적된 모든 알림을 다시 전송해야 합니다.
dwLastCheckPointNumber 저장된 마지막 검사점 수를 나타내는 숫자입니다.

 

 

카탈로그 검사점이 발생하면 검색 서비스는 dwLastCheckPointNumber를 업데이트하고, 해당 검사점 이전에 전송된 모든 알림은 서비스 오류 발생 시 안전하고 복구할 수 있습니다. 알림 공급자는 카탈로그 복원 또는 재설정 시 검사점과 리푸스 간에 전송된 알림만 추적해야 합니다.

카탈로그 복원이 발생하면 검색 서비스는 카탈로그를 마지막으로 저장된 검사점으로 롤백하고 guidCheckPointSignature를 업데이트합니다. 이 경우 알림 공급자는 dwLastCheckPointNumber로 식별된 가장 최근에 저장된 검사점 이후 누적된 모든 알림을 다시 사용해야 합니다.

카탈로그 재설정이 발생하는 경우 검색 서비스는 전체 카탈로그를 재설정하고 guidCatalogResetSignature를 업데이트합니다. 알림 공급자는 전체 크롤링 scope 다시 다시 사용해야 합니다.

추가 리소스

개념

프로토콜 처리기 개발

프로토콜 처리기 이해

아이콘 및 상황에 맞는 메뉴 추가

코드 샘플: 프로토콜 처리기용 셸 확장

프로토콜 처리기 설치 및 등록

프로토콜 처리기에 대한 검색 커넥터 만들기

프로토콜 처리기 디버깅