Share via


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

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"은 "(사과 또는 배) AND 매실"로 작성된 것처럼 해석됩니다. 따라서 문서에 매화라는 단어가 포함되어 있지만 사과도 배도 없는 경우 첫 번째 쿼리는 이를 반환하지만 두 번째 쿼리는 반환하지 않습니다. 따라서 AND 및 OR를 혼합하는 쿼리에 명시적 괄호를 사용하여 실수나 오해를 피하는 것이 좋습니다.

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

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

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

속성은 작성자 또는 크기와 같은 키워드(keyword) 또는 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 이상에서 정식 속성 이름이 될 수 있는 키워드(keyword) 참조됩니다. Windows UI의 AQS는 System.Author 대신 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는 정식 키워드(keyword) System.Author 속성의 니모닉 값은 Author입니다. 정식 키워드의 도입은 Windows Vista 및 이전의 경우처럼 영어 니모닉 키워드가 언어에 관계없이 모든 운영 체제에서 더 이상 보편적으로 인식되지 않는다는 사실을 보완합니다.

참고

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

 

Windows 7의 정식 고급 쿼리 구문

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

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

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

참고

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

 

예제

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

정식 속성 유형 예제 Syntax
문자열 값 System.Author
문자열 값은 author 속성에서 검색됩니다.
System.Author:Jacobs
열거형 범위 System.Priority 우선 순위 속성에는 숫자 값 범위가 있을 수 있습니다.
System.Priority:System.Priority#High
부울 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 연산자를 사용하지 마세요. 일부 연산자는 서로 교환 가능한 기호를 갖습니다.

연산자 기호 예제 Description
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++ Primer"
파일 이름이 "C++ 프라이머" 문자로 시작하는 항목을 찾습니다.
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~>non
속성 값이 문자가 아닌 문자로 끝나는 항목을 찾습니다.
COP_VALUE_CONTAINS ~=
~~
System.Subject.~=round
System.Search.Autosummary:~~round
제목에 이 문자열이 있고 예를 들어 "g라운드 규칙"과 일치하는 메시지를 찾습니다.
문자가 둥근 자동 합계가 있는 모든 항목을 찾습니다.
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 이상용. Author에 "San" 문자로 시작하는 단어가 포함된 항목을 찾습니다.
파일 이름에 마이크로로 시작하는 단어와 exe로 시작하는 단어가 포함된 파일을 찾습니다.

 

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

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

쿼리 값

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

값/기호 예제 Description
String auto
검색할 수 있는 모든 문자 시퀀스입니다. 문자열에는 구문의 일부인 공백 또는 문자 조합이 포함되어서는 안 됩니다. 다음은 자동으로 시작하는 단어를 검색하는 예제입니다.
따옴표 붙은 문자열 "" "결론: 유효" ""파란색" 팀"
모든 문자 시퀀스입니다. 문자열은 구문의 일부로 해석되지 않습니다.
따옴표가 두 배로 늘어나면 쿼리에 포함할 수 있습니다. 이 예제 에서는 "파란색" 팀을 검색합니다.
정수 5678
정수에는 숫자만 사용합니다. 수천에 구분 기호를 사용하지 마세요.
부동 소수점 숫자 5678.1234
부동 소수점 형식은 로캘마다 다르기 때문에 정식 쿼리는 부동 소수점 상수를 사용할 수 없습니다. 부동 소수점 번호와 정식 구문을 사용하는 것은 지역화에 안전하지 않습니다.
부울 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인 항목을 찾습니다.

 

범위 제한

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

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

 

추가 리소스

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

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

ISearchQueryHelper를 사용하여 인덱스 쿼리

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

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