共用方式為


以程式設計方式使用進階查詢語法

進階查詢語法 (AQS) 是 Windows 搜尋用來查詢索引和縮小搜尋參數的預設查詢語法。 開發人員會使用 AQS 以程式設計方式建置查詢(以及使用者縮小其搜尋參數)。 標準 AQS 是在 Windows 7 中引進的,必須在 Windows 7 和更新版本中使用,才能以程式設計方式產生 AQS 查詢。

本主題的組織方式如下:

關於進階查詢語法

查詢是由與 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 和 OR 的任何查詢使用明確的括弧,以避免錯誤或錯誤解譯。

基本查詢會搜尋滿足屬性限制的專案。 基本查詢的唯一必要部分是限制或搜尋值。 如果您未指定屬性,Windows 搜尋會搜尋所有屬性。 <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 搜尋會為您的查詢選擇最適當的運算子:

  • 針對字串屬性,會假設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

三個基本查詢如下:

  • “last quarter”
  • 作者:(特蕾莎·李)
  • folder:MyDocs

使用標準語法的基本查詢為:

System.Size:>1kb

屬性

屬性是由關鍵詞參考,它可以是Windows 7和更新版本中的正式屬性名稱。 Windows UI 中的 AQS 可以使用標籤,而不是標準屬性名稱,例如 author 而非 System.Author。 在 Windows Vista 和更早版本中,不論 UI 語言為何,都可使用英文標籤。 在 Windows 7 和更新版本中,Windows 搜尋只會辨識目前預設 UI 語言中的關鍵詞。

支援自訂屬性

在 Windows Vista 和更早版本中,AQS 中無法使用自定義屬性。 在 Windows 7 和更新版本中,AQS 適用於向屬性系統註冊的自定義屬性。 如需建立自定義屬性的詳細資訊,請參閱 屬性系統

Windows 8 中的 DateTime 屬性

自 Windows 8 起,DateTime 屬性 (例如 System.DateModified) 支援 ISO-8601指定的標準日期和時間格式,選擇性地包含 UTC 時區。

  • Windows 8 和更早版本,不含 UTC 時區的日期時間:YYYY-MM-DDThh:mm:ss

    不論使用者或系統地區設定為何,此格式都會指定當地時間。

  • Windows 8,具有 UTC 時區的日期時間:YYYY-MM-DDThh:mmssTZD

    此格式會指定指定 UTC 時區的時間。

使用當地語言的關鍵詞

在 Windows 7 和更新版本中,助記鍵僅適用於系統語言,例如德文關鍵詞僅適用於德文操作系統,而英文關鍵詞僅適用於英文操作系統。 System.Author 是標準關鍵詞,例如 System.Author 屬性的助記鍵值為 Author。 正式關鍵詞的引進彌補了英文助記關鍵詞不再在所有操作系統上普遍辨識的事實,而不論語言為何,Windows Vista 和更早版本的情況也一樣。

注意

在 Windows 7 和更新版本中,Windows 搜尋只會辨識目前預設語言中的關鍵詞,除非英文是目前的預設值,否則不會使用英文。 我們建議開發人員一律使用標準語法,讓其應用程式不會有關鍵詞的語言問題。

 

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#DaylightSystem.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 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> 代表限制。

下表所列的語法包含運算子、運算符符號、範例和範例描述。 運算子和符號可用於任何語言,並包含在任何查詢中。 請勿使用COP_IMPLICIT或COP_APPLICATION_SPECIFIC運算符。 有些運算子具有可交換的符號。

Operator 符號 範例 描述
COP_EQUAL =
System.FileExtension:=“.txt”
值為字串 「.txt」。。
COP_NOTEQUAL
-
<>
NOT
- -
System.Kind:≠picture
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 picture。
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++ Primer」 字元的專案。
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~>non
尋找屬性值以非字元結尾的專案。
COP_VALUE_CONTAINS ~=
~~
System.Subject.~=round
System.Search.Autosummary:~~round
尋找主旨中有此字串的訊息,並比對 「ground rules」 例如。
尋找包含字元 四捨五入之自動建議的所有專案。
COP_VALUE_NOTCONTAINS ~!
System.Author:~!”sanjay”
尋找沒有字元序列“sanjay”的作者。
COP_DOSWILDCARDS ~
System.FileName:~“Mic?osoft W*d”
尋找檔名開頭為 Mic 的檔案,後面接著一些字元,後面接著 osoft w,後面接著以 d 結尾的任何字元。
? 和 * 字元不會以字面方式解譯,且運作方式類似 DOS 樣式的通配符:
  • ? 會比對一個任意字元。
  • * 比對零個或多個任意字元。
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」 字元的任何專案。
尋找檔名包含開頭為 micro 的任何檔案,後面接著以 exe 開頭的文字。

 

2 空方括弧 ([]) 表示「無值」。

對於字串屬性,預設作業為 COP_WORD_STARTS_WITH 或 COP_WORD_EQUAL。

查詢值

下表列出查詢值限制方式的實用範例。

值/符號 範例 描述
String 自動
可搜尋的任何字元序列。 字串不得包含屬於語法一部分的空格元或字元組合。 此範例會搜尋以 auto 開頭的文字。
引號字串 “” “結論:有效” “”藍色“團隊”
任何字元序列。 字串不會解譯為語法的一部分。
如果雙引號加倍,可以在查詢中包含引號。 此範例會搜尋 「blue」 小組
整數 5678
只對整數使用數位。 請勿對數千個分隔符使用任何分隔符。
浮點數 5678.1234
因為浮點格式會因地區設定而有所不同,所以標準查詢無法使用浮點常數。 搭配浮點數使用標準語法並不安全。
布爾值 true/false System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
TRUE 布爾值。
FALSE 布爾值。
[] System.Keywords:=[]
空的方括弧表示沒有值。 此範例會尋找尚未標記的所有專案。
絕對日期 System.ItemDate:1/26/2010
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 也會辨識相對日期值(例如 今天明天下周下周、下週、下一周和星期一)和日期(例如 星期二星期一。星期三,和月(二月)。


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb..10kb
雙句點表示值範圍。 尋找日期介於 11/05/04 到 11/10/04 之間的專案,包含。
尋找大小介於 5 到 10 kb 之間的專案。

 

範圍限制

用戶可以將搜尋的範圍限制為特定資料夾位置或資料存放區。 例如,如果您使用數個電子郵件帳戶,而且想要將查詢限制為 Microsoft Outlook 或 Microsoft Outlook Express,則可以分別使用 System.Search.Store:mapiSystem.Search.Store:oe 。 下表顯示如何依數據存放區限制搜尋的一些範例。

依數據存放區限制搜尋 關鍵字 範例
檔案 檔案 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”

 

其他資源

以程式設計方式查詢索引

使用 SQL 和 AQS 方法來查詢索引

使用 ISearchQueryHelper 查詢索引

使用 search-ms Protocol 查詢索引

使用 Windows 搜尋 SQL 語法查詢索引