Freigeben über


Programmgesteuerte Verwendung der erweiterten Abfragesyntax

Die erweiterte Abfragesyntax (Advanced Query Syntax, AQS) ist die standardmäßige Abfragesyntax, die von Windows Search zum Abfragen des Indexes und zum Verfeinern und Einschränken von Suchparametern verwendet wird. AQS wird von Entwicklern verwendet, um Abfragen programmgesteuert zu erstellen (und von Benutzern, um ihre Suchparameter einzuschränken). Canonical AQS wurde in Windows 7 eingeführt und muss in Windows 7 und höher verwendet werden, um AQS-Abfragen programmgesteuert zu generieren.

Dieses Thema ist wie folgt organisiert:

Infos zur erweiterten Abfragesyntax

Eine Abfrage besteht aus grundlegenden Abfragen, die mit AND, OR und NOT verbunden sind, wie in der folgenden Beispielsyntax gezeigt:

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

Hinweis

AQS unterscheidet nicht zwischen Groß- und Kleinschreibung, mit Ausnahme von AND, OR und NOT, die in Großbuchstaben geschrieben werden müssen.

 

Wenn eine Abfrage zwei oder mehr Verwendungen von AND oder OR hat, werden sie von links nach rechts gebunden, unabhängig davon, ob es sich um AND oder OR handelt. Das heißt, die Abfrage „Apfel UND Birne ODER Pflaume” wird so interpretiert, als wäre sie als „(Apfel UND Birne) ODER Pflaume” geschrieben, und die Abfrage „Apfel ODER Birne UND Pflaume” wird so interpretiert, als wäre sie als „(Apfel ODER Birne) UND Pflaume” geschrieben. Wenn ein Dokument also das Wort Pflaume enthält, aber weder Apfel noch Birne, gibt die erste Abfrage sie zurück, die zweite Abfrage wird jedoch nicht zurückgegeben. Daher wird empfohlen, für jede Abfrage, die AND und OR kombiniert, explizite Klammern zu verwenden, um Fehler oder Fehlinterpretationen zu vermeiden.

Eine einfache Abfrage sucht nach Elementen, die eine Einschränkung für eine Eigenschaft erfüllen. Der einzige erforderliche Teil einer einfachen Abfrage ist die Einschränkung oder der Suchwert. Wenn Sie keine Eigenschaft angeben, durchsucht Windows Search alle Eigenschaften. <restr> stellt die Sucheinschränkung dar.

Die folgenden Formulare für eine einfache Abfrage sind gültig:

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

Eine Eigenschaft wird durch ein Schlüsselwort wie Autor oder Größe oder durch einen kanonischen Eigenschaftsnamen wie System.DateModified festgelegt. Folgende Formulare gelten für eine Eigenschaft:

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

Ein Operator gibt einen Vorgang an, wie < or =. Eine Liste der gültigen Operatoren finden Sie im Abschnitt „Abfrageoperatoren“ weiter unten in diesem Thema.

Eine grundlegende Einschränkung ist eine einfache Einschränkung für eine Eigenschaft, die ohne Klammern geschrieben werden kann:

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

Eine Einschränkung ist ein Suchwert, z. B. ein Zahlenwert oder ein Zeichenfolgenwert, optional mit einem Operator. Folgende Formulare gelten für eine Einschränkung:

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

Wenn Sie keinen Operator angeben, wählt Windows Search den am besten geeigneten Operator für Ihre Abfrage aus:

  • Bei einer Zeichenfolgeneigenschaft wird der Operator COP_WORD_STARTSWITH $< angenommen.
  • Für alle anderen Eigenschaften wird der COP_EQUAL = Operator angenommen.

Für die programmgesteuerte Verwendung von AQS empfehlen wir, dass Sie immer einen expliziten Operator haben. Das gültige Formular zum Durchsuchen eines einfachen Werts oder Wertebereichs lautet wie folgt:

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

Ein einfacher Wert kann einen der folgenden Typen aufweisen:

<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>

Beispiele

Eine Abfrage, die nach einem Dokument sucht, das die Phase „letztes Quartal” enthält, von Theresa oder Lee verfasst wurde und im Ordner „MyDocs” gespeichert ist, kombiniert drei grundlegende Abfragen wie folgt:

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

Die drei grundlegenden Abfragen sind:

  • „letztes Quartal“
  • author:(theresa OR lee)
  • folder:MyDocs

Eine grundlegende Abfrage mit einer kanonischen Syntax lautet:

System.Size:>1kb

Eigenschaften

Auf Eigenschaften wird durch ein Schlüsselwort verwiesen, das ein kanonischer Eigenschaftsname in Windows 7 und höher sein kann. AQS in der Windows-Benutzeroberfläche kann die Bezeichnung anstelle des kanonischen Eigenschaftennamens verwenden, z. B. „Autor“ anstelle von System.Author. In Windows Vista und früheren Versionen war es möglich, englische Bezeichnungen unabhängig von der Benutzeroberflächensprache zu verwenden. In Windows 7 und höher erkennt Windows Search Schlüsselwörter nur in der aktuellen Standardsprache der Benutzeroberfläche.

Unterstützung für benutzerdefinierte Eigenschaften

In Windows Vista und früheren Versionen waren benutzerdefinierte Eigenschaften in AQS nicht verfügbar. In Windows 7 und höher funktioniert AQS mit benutzerdefinierten Eigenschaften, die beim Eigenschaftensystem registriert sind. Weitere Informationen zum Erstellen benutzerdefinierter Eigenschaften finden Sie unter Eigenschaftensystem.

DateTime-Eigenschaften in Windows 8

Ab Windows 8 unterstützen DateTime-Eigenschaften (wie System.DateModified) das von ISO-8601 angegebene kanonische Datums- und Uhrzeitformat, optional einschließlich der UTC-Zeitzone.

  • Windows 8 und früher: Datum-Uhrzeit ohne UTC-Zeitzone: JJJJ-MM-DDThh:mm:ss

    Dieses Format gibt unabhängig vom Gebietsschema des Benutzers oder des Systems eine ortsunabhängige Uhrzeit an.

  • Windows 8, Datum-Uhrzeit mit UTC-Zeitzone: JJJJ-MM-DDThh:mm:ssTZD

    Dieses Format gibt eine Uhrzeit in der angegebenen UTC-Zeitzone an.

Schlüsselwortverwendung in lokalen Sprachen

In Windows 7 und höher funktionieren Mnemonic-Schlüsselwörter nur in der Systemsprache, z  B. deutsche Schlüsselwörter nur auf einem deutschen Betriebssystem, und englische Schlüsselwörter nur auf einem englischen Betriebssystem. System.Author ist ein kanonisches Schlüsselwort, und der mnemonische Wert für die System.Author-Eigenschaft ist beispielsweise Author. Die Einführung kanonischer Schlüsselwörter gleicht die Tatsache aus, dass englische mnemotechnische Schlüsselwörter nicht mehr auf allen Betriebssystemen unabhängig von der Sprache allgemein anerkannt werden, wie dies bei Windows Vista und früheren Versionen der Fall war.

Hinweis

In Windows 7 und höher erkennt Windows Search Schlüsselwörter nur in der aktuellen Standardsprache und nicht in Englisch, es sei denn, Englisch ist der aktuelle Standardwert. Es wird empfohlen, dass Entwickler immer eine kanonische Syntax verwenden, damit ihre Anwendung keine Sprachprobleme mit Schlüsselwörtern hat.

 

Kanonische erweiterte Abfragesyntax in Windows 7

Die kanonische Syntax wurde für Schlüsselwörter in Windows 7 eingeführt. Beispielhafte Abfrage mit einer kanonischen Eigenschaft: System.Message.FromAddress:=me@microsoft.com. Beim Codieren von Abfragen in Anwendungen, die unter Windows 7 und höher ausgeführt werden, müssen Sie die kanonische Syntax verwenden, um AQS-Abfragen programmgesteuert zu generieren. Wenn Sie keine kanonische Syntax verwenden und Ihre Anwendung in einer Gebietsschema- oder UI-Sprache bereitgestellt wird, die sich von der Sprache im Anwendungscode unterscheidet, werden Ihre Abfragen nicht richtig interpretiert.

Es gelten die folgenden Konventionen für die kanonische Schlüsselwortsyntax:

  • Die kanonische Syntax für eine Eigenschaft ist der kanonische Name, z. B.: System.Photo.LightSource. Bei kanonischen Namen wird die Groß-/Kleinschreibung nicht berücksichtigt.
  • Die kanonische Syntax für die booleschen Operatoren besteht aus den Schlüsselwörtern AND, OR und NOT in Großbuchstaben.
  • Die Operatoren <, >, =, usw. werden nicht lokalisiert und sind somit auch Teil der kanonischen Syntax.
  • Wenn eine Eigenschaft P aufgezählte Werte oder Bereiche mit dem Namen N₁ bis Nk enthält, ist die kanonische Syntax für den I-Wert oder Bereich der kanonische Name für P, gefolgt von dem Zeichen #, gefolgt von NI, wie im folgenden Beispiel dargestellt:
    • System.Photo.LightSource#Daylight, System.Photo.LightSource#StandardA usw.
  • Für einen definierten semantischen Typ T mit Werten oder Bereichen mit dem Namen N₁ bis Nk ist die kanonische Syntax für den I-Wert oder Bereich der kanonische Name für T, gefolgt von dem Zeichen #, gefolgt von NI, wie im folgenden Beispiel dargestellt:
    • System.Devices.LaunchDeviceStageFromExplorer:=System.StructuredQueryType.Boolean#True
  • Bei Literalwerten wie Wörtern oder Ausdrücken entspricht die kanonische Syntax der regulären Syntax. Beispiele für Abfragen mit Literalwerten in kanonischer Syntax sind:
    • System.Author:sanjay
    • System.Keywords:"Animal"
    • System.FileCount:>100

Hinweis

Es gibt keine kanonische Syntax für Zahlen in Windows 7 und höher. Da Gleitkommaformate zwischen Gebietsschemas variieren, wird die Verwendung einer kanonischen Abfrage, die eine Gleitkommakonstante umfasst, nicht unterstützt. Ganzzahlige Konstanten können dagegen nur mit Ziffern (ohne Tausender-Trennzeichen) geschrieben werden und können in kanonischen Abfragen in Windows 7 und höher sicher verwendet werden.

 

Beispiele

Die folgende Tabelle enthält einige Beispiele für kanonische Eigenschaften und die Syntax für die Verwendung.

Typ der kanonischen Eigenschaft Beispiel Syntax
Zeichenfolgenwert System.Author
Der Zeichenfolgenwert wird in der Author-Eigenschaft gesucht:
System.Author:Jacobs
Enumerationsbereich System.Priority Die Prioritätseigenschaft kann einen numerischen Wertbereich aufweisen:
System.Priority:System.Priority#High
Boolean System.IsDeleted
Boolesche Werte können mit jeder booleschen Eigenschaft verwendet werden:
System.IsDeleted:System.StructuredQueryType.Boolean#True und System.IsDeleted:System.StructuredQueryType.Boolean#False
Numerisch System.Size
Es ist nicht möglich, eine kanonische Abfrage, die eine Gleitkommakonstante enthält, sicher zu schreiben, da Gleitkommazahlenformate je nach Gebietsschema variieren. Bei ganzen Zahlen dürfen keine Tausender-Trennzeichen verwendet werden. Zum Beispiel:
System.Size:<12345

 

Weitere Informationen zu kanonischen Eigenschaften und dem Eigenschaftensystem finden Sie im Allgemeinen unter Systemeigenschaften. Alternativ können Sie sich auf die öffentlichen Headerdateien beziehen.

Abfrageoperatoren

Wenn eine Eigenschaft, p, mehrere Werte für ein Element hat, gibt eine AQS-Abfrage für p:<restr> das Element zurück, wenn <restr> für mindestens einen der Werte wahr ist. (<restr> stellt eine Einschränkung dar.)

Die in der folgenden Tabelle aufgeführte Syntax besteht aus einem Operator, einem Operatorsymbol, einem Beispiel und einer Beispielbeschreibung. Der Operator und das Symbol können in einer beliebigen Sprache verwendet und in jeder Abfrage enthalten sein. Verwenden Sie nicht die Operatoren COP_IMPLICIT oder COP_APPLICATION_SPECIFIC. Einige der Operatoren verfügen über austauschbare Symbole.

Operator Symbol Beispiel Beschreibung
COP_EQUAL =
System.FileExtension:=".txt"
Der Wert ist die Zeichenfolge „.txt“.
COP_NOTEQUAL
-
<>
NOT
- -
System.Kind:≠picture
System.Photo.DateTaken:-[]¹
System.Kind:<>picture
System.Kind:NOT picture
System.Kind:- -picture
Die System.Kind-Eigenschaft ist kein Bild.
Die System.Photo.DateTaken-Eigenschaft weist einen Wert auf.
Die System.Kind-Eigenschaft ist kein Bild.
Die System.Kind-Eigenschaft ist kein Bild.
Doppelte NOT-Operatoren, die auf dieselbe Eigenschaft angewendet werden, werden nicht abgebrochen. System.Kind:- -picture entspricht system.Kind:-picture und System.Kind:NOT picture.
COP_LESSTHAN <
System.Size:<1kb
Dieser Wert ist kleiner als 1kb.
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Today
Dieser Wert ist größer als today.
COP_LESSTHANOREQUAL <=

System.Size:<=1kb
Dieser Wert ist kleiner als oder gleich 1kb.
COP_GREATERTHANOREQUAL >=

System.Size:>=1kb
Dieser Wert ist größer als oder gleich 1kb.
COP_VALUE_STARTSWITH ~<
System.FileName:~<"C++ Primer"
Sucht Elemente, bei denen der Dateiname mit den Zeichen „C++ Primer“ beginnt.
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~>non
Sucht Elemente, bei denen der Eigenschaftswert mit den Zeichen non endet.
COP_VALUE_CONTAINS ~=
~~
System.Subject.~=round
System.Search.Autosummary:~~round
Sucht eine Nachricht, die diese Zeichenfolge im Betreff enthält, und stimmt beispielsweise mit „ground rules“ überein.
Sucht alle Elemente mit einer Autosummary, die die Zeichen round enthält.
COP_VALUE_NOTCONTAINS ~!
System.Author:~!"sanjay"
Findet Autoren, die die Zeichensequenz sanjay nicht enthalten.
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
Sucht Dateien, bei denen der Dateiname mit Mic beginnt, gefolgt von einem Zeichen, dann von osoft w und dann gefolgt von allen Zeichen, die mit d enden.
Mit dem Zeichen „?“ und * Zeichen werden nicht wörtlich interpretiert und funktionieren wie DOS-Format-Wildcardzeichen:
  • ? entspricht einem beliebigen Zeichen.
  • * entspricht null oder mehr beliebigen Zeichen.
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Für Windows 7 und höher. Sucht den Ausdruck „Sanjay Jacobs“ in allen From-Eigenschaften. Dem Wort Sanjay muss das Wort Jacobs folgen.
COP_WORD_STARTSWITH $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Für Windows 7 und höher. Sucht jedes Element, bei dem Author ein Wort enthält, das mit den Zeichen „San“ beginnt.
Findet eine Datei, in der der Dateiname ein Wort enthält, das mit Micro beginnt, gefolgt von einem Wort, das mit exe beginnt.

 

¹ Leere eckige Klammern ([]) geben „no value“ an.

Bei Zeichenfolgeneigenschaften ist der Standardvorgang entweder COP_WORD_STARTS_WITH oder COP_WORD_EQUAL.

Abfragewerte

In der folgenden Tabelle finden Sie nützliche Beispiele dafür, wie Abfragewerte eingeschränkt werden können.

Wert/Symbol Beispiele Beschreibung
String auto
Eine beliebige Abfolge von Zeichen, nach denen gesucht werden kann. Die Zeichenfolge darf keine Leerzeichen oder Zeichenkombinationen enthalten, die Teil der Syntax sind. In diesem Beispiel wird nach einem Wort gesucht, das mit auto beginnt.
Zeichenfolge in Anführungszeichen "" "Conclusions: valid" "The ""blue"" team"
Eine beliebige Abfolge von Zeichen. Die Zeichenfolge wird nicht als Teil der Syntax interpretiert.
Anführungszeichen können in einer Abfrage eingeschlossen werden, wenn sie verdoppelt werden. In diesem Beispiel wird nach The "blue" team gesucht.
Ganzzahl 5678
Verwenden Sie nur Ziffern für ganze Zahlen. Verwenden Sie keine Trennzeichen für Tausende.
Gleitkommazahl 5678.1234
Da die Gleitkommaformate je nach Gebietsschema variieren, kann eine kanonische Abfrage keine Gleitkommakonstante verwenden. Die Verwendung der kanonischen Syntax mit Gleitkommazahlen ist nicht lokalisierungsfreundlich.
Boolesch true/false System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
Der boolesche TRUE-Wert.
Der Boolesche FALSE-Wert.
[] System.Keywords:=[]
Leere eckige Klammern geben an, dass kein Wert vorhanden ist. In diesem Beispiel werden alle Elemente gefunden, die nicht markiert wurden.
Absolute Datumsangaben System.ItemDate:1/26/2010
SystemDateModified 10/15/2002 19:00
Es werden Elemente mit dem Datum „26. Januar 2010“ gefunden.
Es werden Elemente gefunden, die am 15. Oktober 2002 zwischen 19:00:00 und 19:00:59 Uhr geändert wurden.

Hinweis:
Da Datumsformate (wie Gleitkommaformate) je nach Gebietsschema variieren, wird die Verwendung der kanonischen Syntax mit absoluten Datumsangaben nicht unterstützt und ist nicht lokalisierungsfähig.


Relative Datumsangaben System.ItemDate:System.StructuredQueryType.DateTime#Today
System.DateAcquired:System.StructuredQueryType.DateTime#NextMonth
System.Message.DateReceived:System.StructuredQueryType.DateTime#LastYear
Es werden Elemente mit dem heutigen Datum gefunden.
Es werden Elemente mit einem Datum im nächsten Monat gefunden.
Es werden Elemente mit einem Datum im letzten Jahr gefunden.

Hinweis:
Neben der Suche nach bestimmten Datums- und Datumsbereichen erkennt AQS relative Datumswerte (wie today, tomorrow, nextweek, nextmonth) und den Tag (wie Tuesday oder Monday..Wednesday) und den Monat (February).


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb..10kb
Doppelte Punkte geben einen Wertbereich an. Es werden Elemente mit einem Datum zwischen dem 05.11.04 und dem 10.11.04 (einschließlich) gefunden.
Es werden Elemente mit einer Größe zwischen 5 und 10 KB gefunden.

 

Einschränkungen des Geltungsbereichs

Benutzer können den Umfang ihrer Suchvorgänge auf bestimmte Ordnerspeicherorte oder Datenspeicher beschränken. Wenn Sie z. B. mehrere E-Mail-Konten verwenden und eine Abfrage auf Microsoft Outlook oder Microsoft Outlook Express beschränken möchten, können Sie System.Search.Store:mapi oder auch System.Search.Store:oe verwenden. In der folgenden Tabelle finden Sie einige Beispiele, wie Sie eine Suche nach Datenspeicher einschränken können.

Einschränken der Suche nach Datenspeicher Schlüsselwort Beispiel
Dateien datei System.Search.Store:file
Outlook mapi System.Search.Store:mapi
Outlook Express oe System.Search.Store:oe
Offlinedateien csc System.Search.Store:csc
Bestimmter Ordner auf lokalem Laufwerk folder System.ItemFolderNameDisplay:C:"\MyFolder"

 

Weitere Ressourcen

  • In Windows 7 und höher kann eine Kontextmenüoption verfügbar sein, je nachdem, ob eine AQS-Bedingung erfüllt ist. Weitere Informationen finden Sie unter „Getting Dynamic Behavior for Static Verbs by Using Advanced Query Syntax“ (Erhalten des dynamischen Verhaltens für statische Verben durch die Verwendung erweiterter Abfragesyntax) in Erstellen der Kontextmenü-Handler.
  • AQS-Abfragen können auf bestimmte Dateitypen, die als Dateitypen bezeichnet werden, beschränkt werden. Weitere Informationen finden Sie unter Dateitypen und Zuordnungen. Eine Referenzdokumentation zu Eigenschaften finden Sie unter System.Kind und System.KindText.

Programm gesteuertes Abfragen des Indexes

Verwenden von SQL- und AQS-Ansätzen zum Abfragen des Index

Abfragen des Index mit ISearchQueryHelper

Abfragen des Index mit dem search-ms-Protokoll

Abfragen des Indexes mit Windows Search SQL-Syntax