다음을 통해 공유


Windows Search용 속성 처리기 개발

Microsoft Windows Search는 속성 처리기를 사용하여 항목에서 속성 값을 추출하고 속성 시스템 스키마를 사용하여 특정 속성을 인덱싱하는 방법을 결정합니다. 속성 값을 읽고 인덱싱하기 위해 Windows Search에서 속성 처리기를 out-of-process로 호출하여 보안 및 견고성을 향상시킵니다. 반면, 속성 처리기는 Windows 탐색기에서 속성 값을 읽고 쓰기 위해 In Process로 호출됩니다.

이 항목에서는 Windows Search와 관련된 정보로 속성 시스템 항목을 보완하고 다음 섹션을 포함합니다.

 

속성 처리기에 대한 디자인 결정

속성 처리기 구현에는 다음 단계가 포함됩니다.

  1. 지원하려는 속성에 대한 디자인 결정
  2. 속성 시스템에 아직 없는 속성에 대한 속성 설명(.propdesc) 파일을 만듭니다.
  3. 속성 처리기 구현 및 테스트
  4. 속성 처리기 및 속성 설명 파일 설치 및 등록
  5. 속성 처리기 설치 및 등록 테스트

시작하기 전에 다음 디자인 질문을 고려해야 합니다.

  • 파일 형식이 지원하는 속성은 무엇인가요?
  • 이러한 속성이 이미 시스템 스키마에 있나요?
  • 기존 시스템 제공 속성 처리기를 사용할 수 있나요?
  • 최종 사용자에게 표시할 수 있는 속성은 무엇입니까?
  • 사용자가 편집할 수 있는 속성은 무엇입니까?
  • 속성 처리기 또는 필터에서 전체 텍스트 검색을 지원해야 하나요?
  • 레거시 애플리케이션을 지원해야 하나요? 그렇다면 무엇을 구현해야 하나요?

참고 항목

계속하기 전에 시스템 제공 속성 처리기 사용을 참조 하여 시스템 제공 속성 처리기를 사용하여 시간과 개발 리소스를 모두 절약할 수 있는지 확인합니다.

 

이러한 결정을 내린 후에는 Windows Search 엔진에서 파일 및 속성 인덱싱을 시작할 수 있도록 사용자 지정 속성에 대한 공식적인 설명을 작성할 수 있습니다. 이러한 공식 설명은 속성 설명 스키마에 설명된 XML 파일입니다.

속성 결정

지원할 속성을 고려할 때 사용자의 인덱싱 및 검색 요구 사항을 식별해야 합니다. 예를 들어 파일 형식에 대해 잠재적으로 유용한 100개의 속성을 식별할 수 있지만 사용자는 소수의 속성만 검색하는 데 관심이 있을 수 있습니다. 또한 Windows 탐색기에서 사용자에게 더 크거나 작은 다른 속성 그룹을 표시하고 사용자가 표시된 속성의 하위 집합만 편집할 수 있도록 할 수 있습니다.

파일 형식은 정의한 사용자 지정 속성과 시스템 정의 속성 집합을 지원할 수 있습니다. 사용자 지정 속성을 만들기 전에 시스템 속성을 검토하여 지원하려는 속성이 시스템 속성에 의해 이미 정의되어 있는지 확인하세요. 항상 가장 중요한 시스템 정의 속성을 지원해야 합니다.

속성을 디자인하는 데 도움이 되는 행렬을 사용하는 것이 좋습니다.

Property name 인덱싱할 수 있나요? 표시할 수 있나요? 편집할 수 있나요?
property1 Y Y N
속성... Y Y N
propertyn N N N

 

이러한 각 속성에 대해 어떤 특성이 있어야 하는지 확인한 다음 속성 설명 XML 파일(.propdesc)에서 공식적으로 설명해야 합니다. 특성에는 속성의 데이터 형식, 레이블, 도움말 문자열 등이 포함됩니다. 인덱싱 가능한 속성의 경우 속성 설명 파일의 searchInfo XML 요소에 있는 다음 속성 특성에 특히 주의해야 합니다.

attribute 설명
inInvertedIndex 선택 사항. 문자열 속성 값을 단어와 반전된 인덱스로 저장된 각 단어로 나눌지 여부를 나타냅니다. 반전된 인덱스를 사용하면 CONTAINS 또는 FREETEXT를 사용하여 속성 값에 대한 단어와 구를 효율적으로 검색할 수 있습니다(예: SELECT ... WHERE CONTAINS "sometext"). FALSE설정하면 전체 문자열에 대해 검색이 수행됩니다. 대부분의 문자열 속성은 이 설정을 TRUE설정해야 합니다. 문자열이 아닌 속성은 이 속성을 FALSE설정해야 합니다. 기본값은 FALSE입니다.
isColumn 선택 사항. 속성을 Windows Search 데이터베이스에 열로 저장할지 여부를 나타냅니다. 속성을 열로 저장하면 전체 열 값에서 검색, 정렬, 그룹화 및 필터링(즉, CONTAINS 또는 FREETEXT를 제외한 모든 조건자 사용)을 수행할 수 있습니다. 반전된 인덱스에서 검색할 매우 큰 텍스트 속성(예: 문서의 본문)이 아니면 사용자에게 표시되는 속성은 이 값을 TRUE 로 설정해야 합니다. 기본값은 FALSE입니다.
isColumnSparse 선택 사항. 값 이 NULL인 경우 속성이 공백을 사용하지 않는지 여부를 나타냅니다. 스파스가 아닌 속성은 값 이 NULL인 경우에도 모든 항목에 대한 공간을 사용합니다. 속성이 다중값인 경우 이 특성은 항상 TRUE입니다. 이 특성은 모든 항목에 대한 값이 있는 경우에만 FALSE 여야 합니다. 기본값은 TRUE입니다.
columnIndexType 선택 사항. 쿼리를 최적화하기 위해 Windows Search 엔진은 isColumn=TRUE인 속성에 대한 보조 인덱스를 만들 수 있습니다. 이렇게 하려면 인덱싱하는 동안 더 많은 처리 및 디스크 공간이 필요하지만 쿼리하는 동안 성능이 향상됩니다. 속성이 사용자별로 자주 정렬, 그룹화 또는 필터링되는 경향이 있는 경우(즉, =, !=, <, >, LIKE, MATCHES 사용) 이 특성을 "OnDisk"로 설정해야 합니다. 기본값은 "NotIndexed"입니다. 다음 값은 유효합니다.
  • NotIndexed: 보조 인덱스가 만들어지지 않습니다.
  • OnDisk: 디스크에 보조 인덱스 만들기 및 저장
Maxsize 선택 사항. Windows 검색 데이터베이스에 저장된 속성 값에 허용되는 최대 크기를 나타냅니다. 이 제한은 전체 벡터가 아닌 벡터의 기본 요소에 적용됩니다. 이 크기를 초과하는 값은 잘립니다. 기본값은 "128"(바이트)입니다.
현재 Windows Search는 파일에서 허용하는 데이터의 양을 계산할 때 maxSize를 사용하지 않습니다. 대신 Windows Search에서 사용하는 제한은 파일 크기 및 레지스트리에서 읽은 MaxGrowFactor(파일 크기 N * MaxGrowFactor)를 HKEY_LOCAL_MACHINE->소프트웨어->Microsoft->Windows Search->Gathering Manager->MaxGrowFactor의 제품입니다. 기본 MaxGrowFactor는 4(4)입니다. 따라서 파일 형식이 총 크기가 작지만 속성이 더 큰 경우 Windows Search에서 내보내려는 모든 속성 데이터를 허용하지 않을 수 있습니다. 그러나 필요에 맞게 MaxGrowFactor를 늘릴 수 있습니다.

 

참고 항목

columnIndexType 특성의 경우 더 빠른 쿼리의 이점은 보조 인덱스가 발생할 수 있는 더 큰 인덱싱 시간과 공간 비용에 대해 가중치를 측정해야 합니다. 그러나 이 비용은 null이 아닌 값이 있는 항목에 대해서만 지불되므로 대부분의 속성에서 이 특성을 "OnDisk"로 설정할 수 있습니다.

 

전체 텍스트 지원

일반적으로 전체 텍스트 검색은 필터라는 구성 요소에서 지원되지만, 복잡하지 않은 파일 형식의 텍스트 기반 파일 형식의 경우 속성 처리기가 개발 작업을 줄이면서 이 기능을 제공할 수 있습니다. 파일 형식에 가장 적합한 항목을 결정하는 데 도움이 되도록 필터 및 속성 처리기 기능을 비교하려면 전체 텍스트 콘텐츠 섹션을 검토해야 합니다. 특히 중요한 점은 필터가 파일당 여러 언어 코드 식별자(LCID)를 처리할 수 있지만 속성 처리기는 처리할 수 없다는 사실입니다.

참고 항목

속성 처리기는 필터가 할 수 있는 방식으로 콘텐츠를 청크할 수 없으므로 큰 파일(복잡한 파일 형식인 경우에도)은 메모리에 완전히 로드되어야 합니다.

 

운영 체제 구현 고려 사항

Windows 7에 대한 구현 정보

Windows 7 이상에서는 속성 처리기, IFilter 또는 새 확장을 등록할 때 새로운 동작이 있습니다. 새 속성 처리기 및/또는 IFilter 가 설치되면 해당 확장이 있는 파일이 자동으로 다시 인덱싱됩니다.

Windows 7에서는 해당 속성 처리기와 함께 IFilter를 설치하고 IFilter를 속성 처리기 전에 등록하는 것이 좋습니다. 속성 처리기의 등록은 먼저 다시 부팅하지 않고 이전에 인덱싱된 파일의 즉시 다시 인덱싱을 시작하고 콘텐츠 인덱싱을 위해 이전에 등록된 IFilter를 활용합니다.

해당 속성 처리기 없이 IFilter설치된 경우 인덱싱 서비스를 다시 시작하거나 시스템을 다시 부팅한 후에 자동 다시 인덱싱이 발생합니다.

Windows 7과 관련된 속성 설명 플래그는 다음 참조 항목을 참조하세요.

Windows Vista 및 이전 버전에 대한 구현 정보

Windows Vista 이전의 필터는 파일 콘텐츠 및 속성을 구문 분석하고 열거하는 데 지원을 제공했습니다. 속성 시스템이 도입되면 필터가 파일 콘텐츠를 처리하는 동안 속성 처리기가 파일 속성을 처리합니다. Windows Vista의 경우 Windows Search에서 필터 처리기를 만들기 위한 모범 사례에 설명된 대로 속성 처리기와 조정하여 IFilter인터페이스의 부분 구현만 개발해야 합니다.

속성 시스템은 Windows XP용 Windows Search 설치에도 포함되어 있지만 타사 및 레거시 애플리케이션은 필터가 콘텐츠와 속성을 모두 처리하도록 요구할 수 있습니다. 따라서 Windows XP 플랫폼에서 개발하는 경우 파일 형식 또는 사용자 지정 속성에 대한 속성 처리기뿐만 아니라 전체 필터 구현을 제공해야 합니다.

 

속성 설명 파일 작성

속성 설명 XML 파일(.propdesc)의 구조는 propertyDescription 항목에 설명되어 있습니다. 검색에 특히 관심이 있는 것은 searchInfo 요소의 특성입니다. 지원할 속성을 결정했으면 각 속성에 대한 속성 설명 파일을 만들고 등록해야 합니다. .propdesc 파일을 등록하면 해당 파일이 스키마의 속성 설명 목록에 포함되고 검색 엔진의 속성 저장소 내에서 열 이름이 됩니다.

스키마 하위 시스템의 IPropertySystem::RegisterPropertySchema를 호출하는 래퍼 API인 PSRegisterPropertySchema 함수를 사용하여 사용자 지정 속성 설명을 등록할 수 있습니다. 이 함수는 로컬 컴퓨터의 .propdesc 파일에 파일 경로를 사용하여 속성 설명 스키마(.propdesc) 파일을 추가하는 것을 스키마 하위 시스템에 알립니다. 일반적으로 애플리케이션의 설치 디렉터리가 "Program Files"에 있습니다. 일반적으로 설치 또는 애플리케이션(예: 속성 처리기 설치 관리자)은 .propdesc 파일을 설치한 후 이 메서드를 호출합니다.

 

속성 처리기 구현

속성 처리기를 개발하려면 다음 인터페이스를 구현해야 합니다.

  • IInitialzeWithStream: 속성 처리기의 스트림 기반 초기화를 제공합니다.
  • IPropertyStore: 속성 값을 열거, 가져오고 설정합니다.
  • IPropertyStoreCapabilities: 선택 사항입니다. 사용자가 사용자 인터페이스에서 속성을 편집할 수 있는지 여부를 식별합니다.

IInitializeWithStream

속성 시스템 항목에 설명된 대로 스트림 기반 초기화를 수행하려면 IInitializeWithStream을 사용하여 속성 처리기를 구현하는 것이 좋습니다. IInitializeWithStream을 구현하지 않도록 선택한 경우 속성 처리기는 속성 처리기의 레지스트리 키에서 DisableProcessIsolation 플래그를 설정하여 격리 프로세스에서 실행을 옵트아웃해야 합니다. 프로세스 격리를 사용하지 않도록 설정하는 것은 일반적으로 레거시 속성 처리기에만 사용되며 새 코드에서 강력히 피해야 합니다.

IPropertyStore

속성 처리기를 만들려면 다음 메서드를 사용하여 IPropertyStore 인터페이스를 구현해야 합니다.

메서드 설명
Commit 속성 변경 사항을 파일에 저장합니다.
GetAt 항목의 속성 배열에서 속성 키를 검색합니다.
GetCount 파일에 연결된 속성의 수를 가져옵니다.
GetValue 특정 속성에 대한 데이터를 검색합니다.
SetValue 새 속성 값을 설정하거나 기존 값을 바꾸거나 제거합니다.

 

 

 

이 인터페이스를 구현하기 위한 중요한 고려 사항은 IPropertyStore 설명서에 포함되어 있습니다.

참고 항목

속성 처리기가 지정된 항목에 대해 동일한 속성에 대해 여러 값을 내보내는 경우 내보낸 마지막 값만 카탈로그에 저장됩니다.

 

 

IPropertyStoreCapabilities

속성 처리기는 필요에 따라 이 인터페이스를 구현하여 특정 속성을 편집하는 사용자의 기능을 사용하지 않도록 설정할 수 있습니다. 이러한 속성은 일반적으로 세부 정보 페이지 및 창에서 편집할 수 있지만 구현 속성 처리기에서는 편집할 수 없습니다. 이 인터페이스를 올바르게 구현하면 셸의 간단한 런타임 오류인 대안보다 더 나은 사용자 환경을 제공합니다.

 

항목 인덱싱 확인

이제 속성 처리기를 구현했으므로 인덱싱을 위해 처리기가 등록된 항목을 확인하려고 합니다. 카탈로그 관리자사용하여 다시 인덱싱을 시작할 수 있으며 크롤링 범위 관리자를 사용하여 인덱서가 크롤링할 URL을 나타내는 기본 규칙을 설정할 수도 있습니다. 또 다른 옵션은 Windows 검색 코드 샘플에서 ReIndex 코드 샘플을 따르는 것입니다.

자세한 내용은 카탈로그 관리자 사용 및 크롤링 범위 관리자 사용을 참조하세요.

 

속성 처리기 설치 및 등록

구현된 속성 처리기를 사용하여 등록해야 하며 해당 파일 이름 확장명을 처리기와 연결해야 합니다. 다음 예제에서는 이 작업을 수행하는 데 필요한 레지스트리 키와 값을 보여줍니다.

HKEY_CLASSES_ROOT
   CLSID
      {<CLSID for property handler>}
         (Default) = <Property Handler Name>
         InProcServer32
            (Default) = <full path to property handler dll>
            ThreadingModel = <your threading model>
HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               PropertySystem
                  PropertyHandlers
                     <.fileextention>
                        (Default) = {<CLSID for property handler>}

 

속성 처리기 테스트 및 문제 해결

다음 목록에서는 수행해야 하는 테스트 종류에 대한 조언을 제공합니다.

  • 파일 형식에서 지원하는 모든 단일 속성에서 출력 가져오기를 테스트합니다.
  • 예를 들어 HTML 문서에서 큰 메타태그를 사용하는 등 큰 속성 값을 사용합니다.
  • 속성 처리기에서 출력을 받은 후 또는 파일 속성을 열거하기 전과 후에 oh.exe와 같은 도구를 사용하여 속성 처리기가 파일 핸들을 편집하여 파일 핸들을 누수하지 않는지 확인합니다.
  • 속성 처리기와 연결된 모든 파일 형식을 테스트합니다. 예를 들어 HTML 필터가 .htm 및 .html 파일 형식에서 작동하도록 검사.
  • 손상된 파일로 테스트합니다. 속성 처리기는 정상적으로 실패해야 합니다.
  • 애플리케이션에서 암호화를 지원하는 경우 속성 처리기가 암호화된 텍스트를 출력하지 않는지 테스트합니다.
  • 속성 처리기가 전체 텍스트 검색을 지원하는 경우:
    • 파일 내용에 특수 유니코드 문자를 여러 대 사용하고 출력을 테스트합니다.
    • 매우 큰 문서의 처리를 테스트하여 속성 처리기가 예상대로 작동하는지 확인합니다.

설치 및 설치 테스트

마지막으로 설치 및 제거 루틴을 테스트해야 합니다.

  • 설치는 실패한 설치에서 복구해야 합니다(예: 설치 취소 및 다시 시작).
  • 제거는 속성 처리기와 연결된 모든 파일을 삭제해야 합니다.
  • 제거는 속성 처리기 설치와 연결된 파일이 아닌 다른 파일을 삭제해서는 안 됩니다.
  • 제거 시 속성 처리기와 연결된 레지스트리 키를 제거해야 합니다.
  • 설치 디렉터리에서 파일이 삭제된 경우에도 제거가 작동해야 합니다.

속성 처리기 문제 해결

다음은 속성 처리기를 개발하는 동안 발생하는 몇 가지 일반적인 오류입니다.

  • 사용자 디렉터리 아래에 .propdesc 파일 또는 DLL을 설치합니다.
  • 상대 경로를 사용하여 구성 요소 등록
  • HKEY_LOCAL_MACHINE 대신 HKEY_CURRENT_USER 구성 요소 등록
  • 비스트림 처리기에 대해 DisableProcessIsolation을 설정하는 것을 잊어버리세요.
  • 테스트 파일을 인덱싱되지 않은 위치에 배치합니다.

인덱서로 작업하는 데 속성 처리기를 가져오는 데 문제가 있는 경우 문제를 해결하는 데 도움이 되는 몇 가지 팁은 다음과 같습니다.

  • 속성 설명(.propdesc 파일)이 isColumn="true", isViewable="true", isQueryable="true"로 적절하게 표시되는지 확인합니다.
  • .propdesc 파일이 전역 위치에 있는지 확인합니다.
  • 절대 경로를 사용하여 .propdesc 파일을 등록했는지 확인합니다.
  • 이벤트 로그가 .propdesc 파일을 등록하는 동안 오류가 기록되지 않았는지 확인합니다.
  • DLL이 사용자 프로필이 아닌 전역 위치에 있는지 확인합니다.
  • DLL이 HKEY_LOCAL_MACHINE\Software\Classes에 등록되어 있는지 확인합니다.
  • 전체 경로(또는 시스템 계정에서 알려진 환경 변수를 사용하여 절대 경로로 확장되는 REG_EXPAND_SZ 문자열)를 사용하여 DLL이 등록되었는지 확인합니다.
  • 속성 처리기가 Windows 탐색기에서 작동하는지 확인합니다.
  • IInitializeWithStream을 사용하는 것이 좋습니다. IInitializeWithFile 또는 IInitializeWithItem을 사용해야 하는 경우 DisableProcessIsolation을 지정했는지 확인합니다.
  • 인덱싱 옵션 제어판 파일 형식을 인덱싱된 파일 형식으로 나열했는지 확인합니다.
  • 테스트 파일이 인덱싱된 위치에 있는지 확인합니다.
  • 속성 처리기를 설치한 후 테스트 파일이 수정되었는지 확인합니다.

테스트 파일이 인덱싱된 위치에 있고 인덱서가 해당 위치를 이미 크롤링한 경우 파일의 다시 인덱싱을 트리거하기 위해 어떤 식으로든 파일을 수정해야 합니다.

 

시스템 제공 속성 처리기 사용

Windows에는 파일 형식의 형식이 호환되는 경우 사용할 수 있는 여러 시스템 제공 속성 처리기가 포함되어 있습니다. 이러한 형식 중 하나를 사용하는 새 파일 확장자를 정의하는 경우 파일 확장자에 대한 CLSID(처리기 클래스 식별자)를 등록하여 시스템 제공 처리기를 사용할 수 있습니다.

다음 표에 나열된 CLSID를 사용하여 파일 형식 형식에 대한 시스템 제공 속성 처리기를 등록할 수 있습니다.

형식 CLSID
OLE DocFile {8d80504a-0826-40c5-97e1-ebc68f953792}
게임 XML 저장 {ECDD6472-2B9B-4b4b-AE36-F316DF3C8D60}
XPS/OPC 처리기 {45670FA8-ED97-4F44-BC93-305082590BFB}
XML {c73f6f30-97a0-4ad1-a08f-540d4e9bc7b9}

 

사용자 지정 속성을 만들기 전에 대신 사용할 수 있는 시스템 정의 속성이 없는지 확인해야 합니다. PSEnumeratePropertyDescriptions를 호출하거나 prop.exe 명령줄 도구를 사용하여 시스템 정의 속성을 열거할 수 있습니다.

시스템 스키마는 이러한 속성이 인덱서와 상호 작용하는 방식을 정의하며 변경할 수 없습니다. 또한 파일 형식을 만들고 편집하고 저장하는 데 사용하는 애플리케이션도 특정 동작을 준수해야 합니다. 예를 들어 애플리케이션이 안전한 저장을 구현하는 경우(편집 중에 임시 파일을 만든 다음 ReplaceFile()를 사용하여 이전 버전의 새 버전을 교환하는 경우 원본 파일에서 새 파일로 모든 속성을 전송해야 합니다. 이렇게 하지 않으면 파일이 사용자 또는 다른 애플리케이션에서 추가한 속성을 잃게 됩니다.

 

예제

다음은 시스템 제공 OLE DocFile 처리기가 있는 파일 형식에 대한 등록을 보여줍니다. OLEDocFile 확장.

HKEY_CLASSES_ROOT
   SystemFileAssociations
      .OLEDocFile
         shellex
            {BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}
               (Default) = {9DBD2C50-62AD-11d0-B806-00C04FD706EC}

다음은 속성 목록 정보의 등록을 보여 주므로 속성입니다. OLEDocFile 파일은 세부 정보 탭 및 창에 표시됩니다.

HKEY_CLASSES_ROOT
   SystemFileAssociations
      .OLEDocFile
         ExtendedTileInfo = prop:System.ItemType;System.Size;System.DateModified;System.Author;System.OfflineAvailability
         FullDetails = prop:System.PropGroup.Description;System.Title;System.Subject;
System.Keywords;System.Category;System.Comment;System.PropGroup.Origin;
System.Author;System.Document.LastAuthor;System.Document.RevisionNumber;
System.Document.Version;System.ApplicationName;System.Company;System.Document.Manager;
System.Document.DateCreated;System.Document.DateSaved;System.Document.DatePrinted;
System.Document.TotalEditingTime;System.PropGroup.Content;System.ContentStatus;
System.ContentType;System.Document.PageCount;System.Document.WordCount;
System.Document.CharacterCount;System.Document.LineCount;
System.Document.ParagraphCount;System.Document.Template;System.Document.Scale;
System.Document.LinksDirty;System.Language;System.PropGroup.FileSystem;
System.ItemNameDisplay;System.ItemType;System.ItemFolderPathDisplay;
System.DateCreated;System.DateModified;System.Size;System.FileAttributes;
System.OfflineAvailability;System.OfflineStatus;System.SharedWith;
System.FileOwner;System.ComputerName
         InfoTip = prop:System.ItemType;System.Size;System.DateModified;System.Document.PageCoun
         PerceivedType = document
         PreviewDetails = prop:*System.DateModified;System.Author;System.Keywords;
*System.Size;System.Title;System.Comment;System.Category;
*System.Document.PageCount;System.ContentStatus;System.ContentType;
*System.OfflineAvailability;*System.OfflineStatus;System.Subject;
*System.DateCreated;*System.SharedWith

 

참조

속성 매핑

개념

Windows Search에서 필터 처리기를 만들기 위한 모범 사례

인덱싱 프로세스

프로토콜 처리기 개발

사용자 지정 파일 형식에 대한 시스템 정의 속성

기타 리소스

속성 시스템

시스템 속성

Windows 검색 코드 샘플