다음을 통해 공유


프로그래밍 방식으로 고급 쿼리 구문 사용하기

AQS(고급 쿼리 구문)는 Windows Search에서 인덱스를 쿼리하고 검색 매개 변수를 구체화하고 좁히는 데 사용하는 기본 쿼리 구문입니다. AQS는 개발자가 프로그래밍 방식으로 쿼리를 빌드하고 사용자가 검색 매개 변수의 범위를 좁히는 데 사용됩니다. 정식 AQS는 Windows 7에서 도입되었으며 프로그래밍 방식으로 AQS 쿼리를 생성하려면 Windows 7 이상에서 사용해야 합니다.

이 항목은 다음과 같이 구성됩니다.

고급 쿼리 구문 정보

쿼리는 다음 예제 구문과 같이 AND, OR 및 NOT과 연결된 기본 쿼리로 구성됩니다.

<query> ::=
     <basic query>
| ( <query> )
| <query> AND <query>  
| <query> <query>    // Same as <query> AND <query>
| <query> OR <query> 
| NOT <query>

참고 항목

AQS는 대/소문자를 구분하지 않으며 AND, OR 및 NOT을 제외하고 모든 대문자여야 합니다.

 

쿼리에 AND 또는 OR 사용이 두 개 이상 있는 경우 AND 또는 OR 여부에 관계없이 왼쪽에서 오른쪽으로 바인딩됩니다. 즉, "apple AND pear OR plum" 쿼리는 "(apple AND pear) OR plum"로 작성된 것처럼 해석되고, "apple OR pear AND plum" 쿼리는 "(apple OR pear) AND plum"로 작성된 것처럼 해석됩니다. 따라서 문서에 매화라는 단어가 포함되어 있지만 사과도 배도 없는 경우 첫 번째 쿼리는 이를 반환하지만 두 번째 쿼리는 반환하지 않습니다. 따라서 AND 및 OR를 혼합하는 모든 쿼리에 명시적 괄호를 사용하여 실수나 잘못된 해석을 방지하는 것이 좋습니다.

기본 쿼리는 속성에 대한 제한을 충족하는 항목을 검색합니다. 기본 쿼리의 유일한 필수 부분은 제한 또는 검색 값입니다. 속성을 지정하지 않으면 Windows Search에서 모든 속성을 검색합니다. <restr> 는 검색 제한을 나타냅니다.

기본 쿼리에 대한 다음 양식은 유효합니다.

<basic query> ::=
     <prop>:<basic restr>
| <restr>

속성은 작성자 또는 크기와 같은 키워드 또는 System.DateModified와 같은 정식 속성 이름으로 지정됩니다. 속성에 대한 유효한 양식은 다음과 같습니다.

<prop> ::= 
     <canonical property name>
| <property label in UI language>

연산자는 =와 같은 < 연산을 나타냅니다. 유효한 연산자 목록은 이 항목의 뒷부분에 있는 쿼리 연산자 섹션을 참조하세요.

기본 제한은 괄호 없이 작성할 수 있는 속성에 대한 간단한 제한입니다.

<basic restr> ::=
     <value>
| <op><value>
| NOT <basic restr>
| ( <restr> )

제한은 선택적으로 연산자가 있는 숫자 값 또는 문자열 값과 같은 검색 값입니다. 제한에 대한 유효한 양식은 다음과 같습니다.

<restr> ::=
    <basic restr>
| <restr> AND <restr>
| <restr> <restr>      // Same as <restr> AND <restr>
| <restr> OR <restr>

연산자를 지정하지 않으면 Windows Search에서 쿼리에 가장 적합한 연산자를 선택합니다.

  • 문자열 속성의 경우 COP_WORD_STARTSWITH $< 연산자가 가정됩니다.
  • 다른 모든 속성의 경우 COP_EQUAL = 연산자가 가정됩니다.

AQS를 프로그래밍 방식으로 사용하려면 항상 명시적 연산자를 사용하는 것이 좋습니다. 간단한 값 또는 값 범위를 검색하는 데 유효한 양식은 다음과 같습니다.

<value> ::=
    <simplevalue>
| <simplevalue> .. <simplevalue>

간단한 값은 다음 형식으로 구성됩니다.

<simplevalue> ::=
  []         // No value, or a null value
| <word>     // A sequence of characters without whitespace
| <number>   // An integer or a floating point number
| <datetime> // A relative date, or an absolute date and/or time
| <Boolean>
| "..."      // A phrase
| <enumeration range>

예제

Theresa 또는 Lee가 작성한 "지난 분기" 단계가 포함된 문서를 검색하고 MyDocs 폴더에 저장된 쿼리는 다음과 같이 세 가지 기본 쿼리를 결합합니다.

"last quarter" author:(theresa OR lee) folder:MyDocs

세 가지 기본 쿼리는 다음과 같습니다.

  • "지난 분기"
  • author:(theresa OR lee)
  • folder:MyDocs

정식 구문을 사용하는 기본 쿼리는 다음과 같습니다.

System.Size:>1kb

속성

속성은 Windows 7 이상에서 정식 속성 이름이 될 수 있는 키워드로 참조됩니다. Windows UI의 AQS는 System.Author 대신 작성자처럼 정식 속성 이름 대신 레이블을 사용할 수 있습니다. Windows Vista 및 이전 버전에서는 UI 언어에 관계없이 영어 레이블을 사용할 수 있었습니다. Windows 7 이상에서 Windows Search는 현재 기본 UI 언어로만 키워드를 인식합니다.

사용자 지정 속성에 대한 지원

Windows Vista 및 이전 버전에서는 사용자 지정 속성을 AQS에서 사용할 수 없습니다. Windows 7 이상에서 AQS는 속성 시스템에 등록된 사용자 지정 속성에서 작동합니다. 사용자 지정 속성을 만드는 방법에 대한 자세한 내용은 속성 시스템을 참조 하세요.

Windows 8의 DateTime 속성

Windows 8을 기준으로 DateTime 속성(예: System.DateModified)은 선택적으로 UTC 표준 시간대를 포함하여 ISO-8601지정된 정식 날짜 및 시간 형식을 지원합니다.

  • UTC 표준 시간대가 없는 Windows 8 이전 날짜-시간: YYYY-MM-DDThh:mm:ss

    이 형식은 사용자 또는 시스템 로캘에 관계없이 현지 시간을 지정합니다.

  • Windows 8, UTC 표준 시간대가 있는 날짜-시간: YYYY-MM-DDThh:mm:ssTZD

    이 형식은 지정된 UTC 표준 시간대의 시간을 지정합니다.

로컬 언어로 키워드 사용

Windows 7 이상에서 니모닉 키워드는 독일어 운영 체제에서만 독일어 키워드, 영어 운영 체제에서만 영어 키워드와 같은 시스템 언어로만 작동합니다. 예를 들어 System.Author 는 정식 키워드이고 System.Author 속성의 니모닉 값은 Author입니다. 정식 키워드의 도입은 Windows Vista 및 이전의 경우처럼 영어 니모닉 키워드가 언어에 관계없이 모든 운영 체제에서 더 이상 보편적으로 인식되지 않는다는 사실을 보완합니다.

참고 항목

Windows 7 이상에서는 영어가 현재 기본값이 아닌 한 Windows Search는 현재 기본 언어로만 키워드를 인식하며 영어에서는 인식하지 않습니다. 개발자는 애플리케이션에 키워드에 언어 문제가 없도록 항상 정식 구문을 사용하는 것이 좋습니다.

 

Windows 7의 정식 고급 쿼리 구문

Windows 7의 키워드에 대해 정식 구문이 도입되었습니다. 정식 속성이 있는 쿼리의 예는 다음과 같습니다 System.Message.FromAddress:=me@microsoft.com. Windows 7 이상에서 실행되는 애플리케이션에서 쿼리를 코딩하는 경우 정식 구문을 사용하여 AQS 쿼리를 프로그래밍 방식으로 생성해야 합니다. 정식 구문을 사용하지 않고 애플리케이션이 애플리케이션 코드의 언어와 다른 로캘 또는 UI 언어로 배포되는 경우 쿼리가 올바르게 해석되지 않습니다.

정식 키워드 구문에 대한 규칙은 다음과 같습니다.

  • 속성의 정식 구문은 정식 이름(예: System.Photo.LightSource.)입니다. 정식 이름은 대/소문자를 구분하지 않습니다.
  • 부울 연산자의 정식 구문은 모든 대문자로 AND, OR 및 NOT 키워드로 구성됩니다.
  • 연산 <자 , >=등은 지역화되지 않으므로 정식 구문의 일부이기도 합니다.
  • 속성 P 에 N부터 Nk까지의 열거형 값 또는 범위가 있는 경우 다음 예제와 같이 I번째 값 또는 범위에 대한 정식 구문은 P의 정식 이름 뒤에 #이라는 문자와 NI가 잇는 정식 구문입니다.
    • System.Photo.LightSource#Daylight, System.Photo.LightSource#StandardA등입니다.
  • N부터 Nk까지의 값 또는 범위가 있는 정의된 의미 체계 형식 T의 경우 다음 예제와 같이 I번째 값 또는 범위에 대한 정식 구문은 T의 정식 이름 뒤에 #이라는 문자와 NI가 잇는 정식 구문입니다.
    • System.Devices.LaunchDeviceStageFromExplorer:=System.StructuredQueryType.Boolean#True
  • 단어 또는 구와 같은 리터럴 값의 경우 정식 구문은 일반 구문과 동일합니다. 정식 구문에서 리터럴 값을 사용하는 쿼리의 예는 다음과 같습니다.
    • System.Author:sanjay
    • System.Keywords:"Animal"
    • System.FileCount:>100

참고 항목

Windows 7 이상에서는 숫자에 대한 정식 구문이 없습니다. 부동 소수점 형식은 로캘마다 다르기 때문에 부동 소수점 상수와 관련된 정식 쿼리의 사용은 지원되지 않습니다. 반면 정수 상수는 숫자(수천 개의 구분 기호 없음)만 사용하여 작성할 수 있으며 Windows 7 이상의 정식 쿼리에서 안전하게 사용할 수 있습니다.

 

예제

다음 표에서는 정식 속성 및 사용 구문의 몇 가지 예를 보여 줍니다.

정식 속성의 형식 예시 구문
문자열 값 System.Author
문자열 값은 author 속성에서 검색됩니다.
System.Author:Jacobs
열거형 범위 System.Priority 우선 순위 속성에는 숫자 값 범위가 있을 수 있습니다.
System.Priority:System.Priority#High
Boolean System.IsDeleted
부울 값은 부울 속성과 함께 사용할 수 있습니다.
System.IsDeleted:System.StructuredQueryType.Boolean#TrueSystem.IsDeleted:System.StructuredQueryType.Boolean#False
숫자 System.Size
부동 소수점 형식은 로캘마다 다르기 때문에 부동 소수점 상수가 포함된 정식 쿼리를 안전하게 작성할 수 없습니다. 정수는 수천 개의 구분 기호 없이 작성해야 합니다. 예시:
System.Size:<12345

 

일반적으로 정식 속성 및 속성 시스템에 대한 자세한 내용은 시스템 속성을 참조하세요. 또는 공용 헤더 파일을 참조하세요.

쿼리 연산자

속성 p에 일부 항목에 대한 값이 여러 개 있는 경우 p:<restr>에 대한 AQS 쿼리는 하나 이상의 값에 대해 restr>가 true면 <항목을 반환합니다. (<restr> 는 제한을 나타냅니다.)

다음 표에 나열된 구문은 연산자, 연산자 기호, 예제 및 예제 설명으로 구성됩니다. 연산자와 기호는 모든 언어로 사용할 수 있으며 모든 쿼리에 포함될 수 있습니다. COP_IMPLICIT 또는 COP_APPLICATION_SPECIFIC 연산자를 사용하지 마세요. 일부 연산자는 서로 교환 가능한 기호가 있습니다.

연산자 기호 예제 설명
COP_EQUAL =
System.FileExtension:=".txt"
값은 문자열 ".txt"입니다.
COP_NOTEQUAL
-
<>
NOT
- -
System.Kind:≠픽처
System.Photo.DateTaken:-[]을(를)
System.Kind:<>picture
System.Kind:NOT 그림
System.Kind:- -picture
System.Kind 속성은 그림이 아닙니다.
System.Photo.DateTaken 속성에 값이 있습니다.
System.Kind 속성은 그림이 아닙니다.
System.Kind 속성은 그림이 아닙니다.
동일한 속성에 적용된 Double NOT 연산자는 취소되지 않습니다. 따라서 System.Kind:- -picture는 System.Kind:-picture 및 System.Kind:NOT 그림과 동일합니다.
COP_LESSTHAN <
System.Size:<1kb
이 값은 1kb 미만입니다.
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Today
이 값은 현재보다 큽합니다.
COP_LESSTHANOREQUAL <=

System.Size:<=1kb
이 값은 1kb보다 작거나 같습니다.
COP_GREATERTHANOREQUAL >=

System.Size:>=1kb
이 값은 1kb보다 크거나 같습니다.
COP_VALUE_STARTSWITH ~<
System.FileName:~<"C++ 입문서"
파일 이름이 "C++ 입문서" 문자로 시작하는 항목을 찾습니다.
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~>non
속성 값이 아닌 문자로 끝나는 항목을 찾습니다.
COP_VALUE_CONTAINS ~=
~~
System.Subject.~=round
System.Search.Autosummary:~~round
제목에 이 문자열이 있는 메시지를 찾고 예를 들어 "g라운드 규칙"과 일치합니다.
문자가 둥근 Autosummary를 사용하여 모든 항목을 찾습니다.
COP_VALUE_NOTCONTAINS ~!
System.Author:~!" 산제이"
문자 시퀀스 "sanjay"가 없는 작성자를 찾습니다.
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
파일 이름이 Mic로 시작하는 파일을 찾은 다음 일부 문자, osoft w, d끝나는 문자를 찾습니다.
? 및 * 문자는 문자 그대로 해석되지 않으며 DOS 스타일 와일드카드 문자처럼 작동합니다.
  • ? 는 임의의 문자 하나와 일치합니다.
  • * 0개 이상의 임의 문자와 일치합니다.
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Windows 7 이상용. 모든 From 속성에서 "Sanjay Jacobs"라는 구를 찾습니다. 산제이라는 단어 뒤에는 제이콥스라는 단어가 잇따라 있어야 합니다.
COP_WORD_STARTSWITH $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Windows 7 이상용. "San" 문자로 시작하는 단어가 Author에 포함된 항목을 찾습니다.
파일 이름에 마이크로로 시작하는 단어와 exe로 시작하는 단어가 포함된 파일을 찾습니다.

 

1 빈 대괄호([])는 "값 없음"을 나타냅니다.

문자열 속성의 경우 기본 작업은 COP_WORD_STARTS_WITH 또는 COP_WORD_EQUAL.

쿼리 값

쿼리 값을 제한하는 방법에 대한 유용한 예제는 다음 표에 나와 있습니다.

값/기호 예제 설명
문자열 auto
검색할 수 있는 모든 문자 시퀀스입니다. 문자열에는 구문의 일부인 공백 또는 문자 조합이 포함되어서는 안 됩니다. 다음은 자동으로 시작하는 단어를 검색하는 예제입니다.
따옴표 붙은 문자열 "" "결론: 유효" ""파란색" 팀"
모든 문자 시퀀스입니다. 문자열은 구문의 일부로 해석되지 않습니다.
따옴표가 두 배로 늘어나면 쿼리에 포함될 수 있습니다. 이 예제에서는 "파란색" 팀을 검색합니다.
정수 5678
정수에 숫자만 사용합니다. 수천에 구분 기호를 사용하지 마세요.
부동 소수점 수 5678.1234
부동 소수점 형식은 로캘마다 다르기 때문에 정식 쿼리는 부동 소수점 상수를 사용할 수 없습니다. 부동 소수점 숫자와 정식 구문을 사용하는 것은 지역화에 안전하지 않습니다.
Boolean true/false System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
TRUE 부울 값입니다.
FALSE 부울 값입니다.
[] System.Keywords:=[]
빈 대괄호는 값이 없음을 나타냅니다. 이 예제에서는 태그가 지정되지 않은 모든 항목을 찾습니다.
절대 날짜 System.ItemDate:2010/1/26
SystemDateModified 10/15/2002 19:00
날짜가 2010년 1월 26일인 항목을 찾습니다.
2002년 10월 15일 19:00:00~19:00:59 사이에 수정된 항목을 찾습니다.

:
날짜 형식(예: 부동 소수점 형식)은 로캘마다 다르기 때문에 절대 날짜와 정식 구문을 사용하는 것은 지원되지 않으며 지역화가 안전하지 않습니다.


상대 날짜 System.ItemDate:System.StructuredQueryType.DateTime#Today
System.DateAcquired:System.StructuredQueryType.DateTime#NextMonth
System.Message.DateReceived:System.StructuredQueryType.DateTime#LastYear
오늘 날짜가 있는 항목을 찾습니다.
다음 달에 날짜가 있는 항목을 찾습니다.
지난 해의 날짜가 있는 항목을 찾습니다.

:
AQS는 특정 날짜 및 날짜 범위를 검색하는 것 외에도 상대 날짜 값(예: 오늘, 내일, 다음 주, 다음 주) 및 일(예: 화요일 또는 월요일)을 인식합니다. 수요일) 및 월(2월).


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb. 10kb
이중 기간은 값 범위를 나타냅니다. 11/05/04에서 11/10/04 사이의 날짜를 포함하는 항목을 찾습니다.
크기가 5~10kb인 항목을 찾습니다.

 

범위 제한

사용자는 검색 범위를 특정 폴더 위치 또는 데이터 저장소로 제한할 수 있습니다. 예를 들어 여러 전자 메일 계정을 사용하고 쿼리를 Microsoft Outlook 또는 Microsoft Outlook Express로 제한하려는 경우 사용하거나 System.Search.Store:oe 각각 사용할 System.Search.Store:mapi 수 있습니다. 다음 표에서는 데이터 저장소별로 검색을 제한하는 방법에 대한 몇 가지 예를 보여 줍니다.

데이터 저장소로 검색 제한 키워드 예시
Files 파일 System.Search.Store:file
Outlook mapi System.Search.Store:mapi
Outlook Express oe System.Search.Store:oe
오프라인 파일 csc System.Search.Store:csc
로컬 드라이브의 특정 폴더 folder System.ItemFolderNameDisplay:C:"\MyFolder"

 

추가 리소스

  • Windows 7 이상에서는 AQS 조건이 충족되는지 여부에 따라 바로 가기 메뉴 옵션을 사용할 수 있습니다. 자세한 내용은 상황에 맞는 메뉴 처리기 만들기에서 "고급 쿼리 구문을 사용하여 정적 동사에 대한 동적 동작 가져오기"를 참조하세요.
  • AQS 쿼리는 파일 종류라고 하는 특정 형식의 파일로 제한될 수 있습니다. 자세한 내용은 파일 형식 및 연결을 참조 하세요. 속성 참조 설명서는 System.KindSystem.KindText를 참조하세요.

프로그래밍 방식으로 인덱스 쿼리

SQL 및 AQS 접근 방식을 사용하여 인덱스 쿼리

ISearchQueryHelper를 사용하여 인덱스 쿼리

search-ms 프로토콜을 사용하여 인덱스 쿼리

Windows Search SQL 구문을 사용하여 인덱스 쿼리