검색 루트 관리

CSM(크롤링 범위 관리자)을 사용하면 Windows Search 크롤링 scope 데이터 저장소에 대한 검색 루트를 추가하고 제거할 수 있습니다.

이 항목은 다음과 같은 주제로 이루어져 있습니다.

 

검색 루트 정보

검색 루트는 특정 범위를 포함하거나 제외할 수 있는 셸 네임스페이스의 기반을 정의하며, 일반적으로 열거할 수 있는 프로토콜에서 가장 높은 수준의 컨테이너입니다. 이 저장소에서 인덱싱해야 하거나 인덱싱해서는 안 되는 부분을 지정하지 않습니다. 콘텐츠 저장소가 존재하고 등록된 프로토콜 처리기와 연결되어 있음을 알리는 신호일 뿐입니다. 검색 루트 URL을 식별하기 위한 구문에는 프로토콜, 저장소 또는 사용자의 보안 식별자, 경로 및 선택적으로 특정 항목(예: 파일)이 포함됩니다. 다음 예제에서는 검색 루트에 대한 구문의 두 가지 형태를 보여 줍니다.

<protocol>://<store or SID>\<path>\[item]
or
<protocol>://<store or SID>/<path>/[item]

프로토콜> 세그먼트 뒤에<는 세 개의 슬래시(file:///)가 필요한 프로토콜인 파일이 아니면 두 개의 슬래시('/')가 와야 합니다. 사이트 또는 SID> 세그먼트는 <검색 루트가 사용자와 관련이 있는 경우 콘텐츠 저장소 또는 사용자 보안 식별자를 나타냅니다. 경로> 세그먼트는 <디렉터리 또는 폴더와 같은 컨테이너 집합이며 와일드카드 문자 '*'를 포함할 수 있습니다. 항목> 세그먼트는 <선택 사항이며 와일드카드 문자 '*'를 포함할 수도 있습니다. 항목을 포함하지 않는 경우 슬래시로 경로 세그먼트를 완료해야 합니다. 그렇지 않으면 인덱서는 마지막 하위 연결자가 항목이라고 가정합니다.

예를 들어 사용자 지정 애플리케이션에 대해 *.myext 형식의 파일을 처리하기 위해 myPH(프로토콜 처리기)를 구현했다고 가정합니다. 이러한 모든 파일은 로컬 컴퓨터의 WorkteamA\ProjectFiles 폴더에 있습니다. 에 대한 검색 루트는 다음과 같을 수 있습니다.

  • myPH:///C:\WorkteamA\ProjectFiles\

모든 .myext 파일을 포함할 계획이지만 해당 컨테이너의 다른 파일은 인덱스에 포함할 계획이 없다고 가정합니다. 에 대한 검색 루트는 다음과 같을 수 있습니다.

  • myPH:///C:\WorkteamA\ProjectFiles\*.myext.

와일드카드 패턴은 와일드카드 문자 '*'를 사용하여 URL을 정의하고 URL이 아닌 패턴으로 간주되지만 용어는 종종 서로 바꿔서 사용됩니다. 예를 들어 file:///C:\ProjectA\*\data\는 다음 URL과 일치합니다.

  • C:\ProjectA\version1\data\
  • C:\ProjectA\version2\data\

그러나 해당 패턴은 다음 URL과 일치하지 않습니다.

  • C:\ProjectA\version1\temp\data\

인덱서의 크롤링 scope 아직 없는 컨테이너에 대한 새 검색 루트를 만들어야 합니다. 경로 C:\ParentScope가 크롤링 scope 이미 포함되어 있는 경우 자식 scope 이전에 제외되었다는 것을 알지 못하는 한 C:\ParentScope\ChildScope에 대한 새 검색 루트를 추가할 필요가 없습니다.

Windows Search 옵션을 설정하기 위한 사용자 인터페이스는 검색에 대한 scope 규칙을 구체화할 수 있도록 사용자에게 검색 루트를 표시합니다. 사용자 지정 프로토콜 처리기, 컨테이너 및/또는 애플리케이션에 대한 설치 프로세스의 일부로 포함 및 제외 규칙을 사용하여 기본 크롤링 scope 정의할 수 있습니다. 이러한 규칙은 최종 사용자에게 위치로 제공됩니다. 사용자는 미리 정의된 검색 루트의 하위 디렉터리 내에서 탐색하고 검색에 포함할 항목을 선택하거나 제외하려는 항목을 지울 수 있습니다.

 

시작하기 전에

CSM(크롤링 범위 관리자) 인터페이스를 사용하려면 먼저 다음 필수 구성 요소 단계를 수행해야 합니다.

  1. CrawlSearchManager 개체를 만들고 해당 ISearchManager 인터페이스를 가져옵니다.
  2. "SystemIndex"에 대해 ISearchManager::GetCatalog를 호출하여 ISearchCatalogManager 인터페이스의 instance 가져옵니다.
  3. ISearchCatalogManager::GetCrawlScopeManager를 호출하여 ISearchCrawlScopeManager 인터페이스의 instance 가져옵니다.

CSM(크롤링 범위 관리자)을 변경한 후 ISearchCrawlScopeManager::SaveAll을 호출해야 합니다. 이 메서드는 매개 변수를 사용하지 않고 성공에 대한 S_OK 반환합니다.

 

Windows 7: 새 크롤링 범위 관리자 API

Windows 7 이상에서 ISearchCrawlScopeManager2ISearchCrawlScopeManager 인터페이스의 기능을 확장합니다. ISearchCrawlScopeManager2::GetVersion 메서드는 CSM의 상태가 변경되었는지 클라이언트에 알리는 CSM(크롤링 범위 관리자) 버전을 가져옵니다. ISearchCrawlScopeManager2::GetVersion 은 프로세스 간 호출을 발생시키지 않습니다. 함수가 성공하면 클라이언트가 포인터에서 UnmapViewOfFile 을 호출하고 반환된 핸들에서 CloseHandle 을 호출할 때까지 반환되는 포인터는 유효한 상태로 유지됩니다.

 

크롤링 범위에 루트 추가

ISearchCrawlScopeManager는 탐색 및/또는 watch 컨테이너와 포함하거나 제외할 해당 컨테이너 아래의 항목에 대해 검색 엔진에 알릴 수 있습니다. 새 검색 루트를 추가하려면 ISearchRoot 개체를 인스턴스화하고 루트 특성을 설정한 다음 ISearchCrawlScopeManager::AddRoot 를 호출하고 ISearchRoot 개체에 대한 포인터를 전달합니다. 검색 루트 URL은 앞에서 설명한 검색 루트와 동일한 형식을 사용합니다.

다음 표에서는 ISearchRoot에 대한 관련 put 메서드에 대해 설명합니다. 인터페이스의 다른 put 메서드는 현재 Windows Search에서 사용되지 않습니다. 보안을 향상하기 위해 모든 루트에 사용자의 SID(보안 식별자)를 포함하는 것이 좋습니다. 예를 들어 한 사용자가 다른 사용자의 받은 편지함에서 인덱싱된 항목을 볼 수 없도록 사용자별 프로세스에서 쿼리를 실행하면 사용자별 루트가 더 안전합니다.

메서드 설명
put_ProvidesNotifications 프로토콜 처리기 또는 다른 애플리케이션이 검색 루트 아래의 URL 변경 내용을 검색 엔진에 알리는 경우 TRUE 로 설정합니다. 알림은 URL을 다시 인덱싱해야 했음을 나타냅니다.
put_RootURL 현재 검색의 루트 URL을 설정합니다. URL은 앞에서 설명한 검색 루트 양식을 사용합니다.

 

 

기본적으로 인덱서는 검색 루트를 추가할 때 scope 크롤링하지 않습니다. 루트에 대한 포함 규칙도 추가해야 합니다. 애플리케이션에 대한 사용자별 루트를 추가하려면 애플리케이션이 시작될 때 해당 애플리케이션이 새 사용자에게 적절한 루트를 추가해야 합니다.

새 사용자에게 적절한 루트를 추가하려면 다음을 수행합니다.

  1. 사용자의 SID를 가져옵니다.
  2. 모든 루트를 열거하여 이 SID에 대한 루트가 있는지 여부를 검사.
  3. 필요한 경우 SID를 사용하여 새 루트를 추가합니다.

 

크롤링 범위에서 루트 제거

해당 URL을 더 이상 인덱싱하지 않으려면 ISearchCrawlScopeManager를 사용하여 크롤링 scope 루트를 제거할 수 있습니다. 루트를 제거하면 해당 URL에 대한 모든 scope 규칙도 삭제됩니다. 예를 들어 시스템에서 콘텐츠 저장소 및/또는 해당 프로토콜 처리기를 제거하려는 경우를 가정해 보겠습니다. 애플리케이션을 제거하고 모든 데이터를 제거한 다음 크롤링 scope 검색 루트를 제거할 수 있으며 크롤링 범위 관리자는 루트 및 루트와 연결된 모든 scope 규칙을 제거합니다.

기존 검색 루트를 제거하려면 제거하려는 검색 루트를 사용하여 ISearchCrawlScopeManager::RemoveRoot 를 호출합니다. 검색 루트 URL은 앞에서 설명한 검색 루트와 동일한 형식을 사용합니다. 이 메서드는 루트를 찾을 수 없는 경우 S_FALSE 반환하고 발견된 루트를 제거하는 동안 오류가 발생한 경우 오류 코드를 반환합니다.

검색 루트를 제거하면 Windows Search 옵션에 대한 사용자 인터페이스의 URL도 제거되므로 사용자는 사용자 인터페이스를 사용하여 해당 컨테이너 또는 위치를 다시 추가할 수 없습니다. 검색 루트의 모든 사용자 집합 재정의를 제거하고 원래 검색 루트 및 scope 규칙에 되돌리기 수도 있습니다. 자세한 내용은 범위 규칙 관리를 참조하세요.

참고

Windows Vista에서 사용자가 제어판 사용자 프로필을 통해 제거되면 CSM은 SID를 사용하여 모든 규칙과 루트를 제거하고 카탈로그에서 인덱싱된 항목을 제거합니다. Windows XP에서는 사용자의 루트 및 규칙을 수동으로 제거해야 합니다.

 

 

크롤링 범위에서 루트 열거

CSM은 표준 COM 스타일 열거자 인터페이스인 IEnumSearchRoots를 사용하여 검색 루트를 열거합니다. 이 인터페이스를 사용하여 다양한 용도로 검색 루트를 열거할 수 있습니다. 예를 들어 전체 크롤링 scope 사용자 인터페이스에 표시하거나 특정 루트 또는 루트의 자식이 이미 크롤링 scope 있는지 검색할 수 있습니다.

 

참조

ISearchCrawlScopeManager

ISearchRoot

IEnumSearchRoots

개념

크롤링 범위 관리자 사용

범위 규칙 관리