プログラムによる高度なクエリ構文の使用

高度なクエリ構文 (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 を 2 つ以上使用している場合、AND または OR のどちらであっても、クエリは左から右にバインドされます。 つまり、クエリ "apple AND pear OR plum" は "(apple AND pear) OR plum" と書かれたかのように解釈され、クエリ "apple OR pear AND plum" は "(apple OR pear) AND plum" と書かれたかのように解釈されます。 したがって、文書に plum という単語が含まれているが、Apple も pear も含まれていない場合、最初のクエリはそれを返しますが、2 番目のクエリは返しません。 そのため、間違いや誤った解釈を避けるために、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 フォルダーに保存されたフェーズ "最後の四半期" を含むドキュメントを検索するクエリは、次の 3 つの基本的なクエリを組み合わせます。

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

3 つの基本的なクエリは次のとおりです。

  • "最後の四半期"
  • 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 など) では、 ISO-8601 で指定された標準の日付と時刻の形式 (必要に応じて UTC タイム ゾーンを含む) がサポートされています。

  • Windows 8 以前、UTC タイム ゾーンなし日時: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 という名前の列挙値または範囲がある場合、次の例に示すように、 I番目の値または範囲の正規構文は P の正規名、続いて文字 #、続いてN I です。
    • System.Photo.LightSource#DaylightSystem.Photo.LightSource#StandardA、など。
  • N₁ ~ Nk という名前の値または範囲を持つ定義済みのセマンティック型 T の場合、 I番目の値または範囲の正規構文は T の正規名で、次の例に示すように文字 #の後に続けてN I が続きます。
    • 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
Boolean System.IsDeleted
ブール値は、任意の Boolean プロパティで使用できます。
System.IsDeleted:System.StructuredQueryType.Boolean#Trueそして System.IsDeleted:System.StructuredQueryType.Boolean#False
数値 System.Size
浮動小数点の形式はロケールによって異なるため、浮動小数点定数を含む正規クエリを安全に記述することはできません。 整数は、桁区切り記号なしで書き込む必要があります。 次に例を示します。
System.Size:<12345

 

正規プロパティとプロパティ システムの一般的な詳細については、「 システム プロパティ」を参照してください。 または、パブリック ヘッダー ファイルを参照してください。

クエリ演算子

プロパティ p に項目に複数の値がある場合、少なくとも 1 つの値に対して restr が true の場合<、p:<restr>> の AQS クエリは項目を返します。 (<restr> は制限を表します)。

次の表に示す構文は、演算子、演算子記号、例、および説明例で構成されています。 演算子と記号は、任意の言語で使用でき、任意のクエリに含めることができます。 COP_IMPLICIT演算子またはCOP_APPLICATION_SPECIFIC演算子は使用しないでください。 一部の演算子には、交換可能な記号があります。

演算子 Symbol 説明
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 プロパティは画像ではありません。
同じプロパティに適用された二重 NOT 演算子は取り消されません。したがって、System.Kind:- -picture は System.Kind:-picture と System.Kind:NOT picture と同等です。
COP_LESSTHAN <
System.Size:<1kb
この値は 1 kb 未満です
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Today
この値は 現在より大きい値です。
COP_LESSTHANOREQUAL <=

System.Size:<=1kb
この値は 1 kb 以下です
COP_GREATERTHANOREQUAL >=

System.Size:>=1kb
この値は 1 kb 以上です
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" と一致するメッセージを検索します。
丸い文字を含むオート sumary を持つすべての アイテムを検索します。
COP_VALUE_NOTCONTAINS ~!
System.Author:~!"サンジャイ"
文字シーケンス "sanjay" が含まれていない作成者を検索します。
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
ファイル名が Mic で始まり、その後に何らかの文字が続き、その後に osoft w が続き、 d で終わる任意の文字が続くファイルを検索します。
? および * 文字はリテラルとして解釈されず、DOS スタイルのワイルドカード文字のように機能します。
  • ? は 1 つの任意の文字と一致します。
  • * は 0 個以上の任意の文字と一致します。
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Windows 7 以降の場合。 すべての From プロパティで "Sanjay Jacobs" という語句を検索します。 "Sanjay" という単語の後に「ジェイコブス」という単語が続く必要があります。
COP_WORD_STARTSWITH $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Windows 7 以降の場合。 Author に "San" という文字で始まる単語が含まれているアイテムを検索します。
ファイル名に micro で始まる単語と exe で始まる単語が含まれている任意のファイルを検索 します

 

¹ 空の角かっこ ([]) は "値なし" を示します。

文字列プロパティの場合、既定の操作はCOP_WORD_STARTS_WITHまたはCOP_WORD_EQUALです。

クエリ値

クエリ値を制限する方法の便利な例を次の表に示します。

値/シンボル 説明
String 自動
検索できる文字の任意のシーケンス。 文字列には、構文の一部である空白文字や文字の組み合わせを含めてはいけません。 次の使用例は、auto で始まる単語を検索 します
引用符で囲まれた文字列 "" "結論: valid" "The ""blue"" team"
文字の任意のシーケンス。 文字列は構文の一部として解釈されません。
二重引用符は、二重引用符の場合にクエリに含めることができます。 次の使用例 は、"青" チームを検索します。
Integer 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
今日の日付のアイテムを検索します。
次の月の日付のアイテムを検索します。
過去 1 年間の日付のアイテムを検索します。

注:
AQS は、特定の日付と日付範囲を検索するだけでなく、相対日付値 ( 今日明日次週次月など)、および日 ( 火曜日 や月曜日など) を認識 します。水曜日)、月 (2 月)。


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb..10 kb
二重ピリオドは値の範囲を示します。 11/05/04 から 11/10/04 までの日付を含むアイテムを検索します。
サイズが 5 ~ 10 kb の項目を検索します。

 

スコープの制限

ユーザーは、検索の範囲を特定のフォルダーの場所またはデータ ストアに制限できます。 たとえば、複数のメール アカウントを使用していて、クエリを Microsoft Outlook または Microsoft Outlook Express に制限する場合は、 または System.Search.Store:oe をそれぞれ使用System.Search.Store:mapiできます。 次の表に、データ ストアによる検索を制限する方法の例をいくつか示します。

データ ストアによる検索を制限する Keyword 例:
ファイル file 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.Kind」および 「System.KindText」を参照してください。

プログラムによるインデックスのクエリ

SQL と AQS のアプローチを使用したインデックスのクエリ

ISearchQueryHelper を使用したインデックスのクエリ

search-ms プロトコルを使用したインデックスのクエリ

Windows Search SQL 構文を使用したインデックスのクエリ