Programmgesteuertes Verwenden der erweiterten Abfragesyntax

Erweiterte Abfragesyntax (Advanced Query Syntax, AQS) ist die Standardabfragesyntax, die von Windows Search zum Abfragen des Indexes und zum Einschränken und Einschränken von Suchparametern verwendet wird. AQS wird von Entwicklern verwendet, um Abfragen programmgesteuert zu erstellen (und von Benutzern, um ihre Suchparameter einzugrenzen). Kanonische 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:

Informationen 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

Bei AQS wird die Groß-/Kleinschreibung nicht beachtet, mit Ausnahme von AND, OR und NOT, die in Großbuchstaben enthalten sein müssen.

 

Wenn eine Abfrage zwei oder mehr Verwendungen von AND oder OR aufweist, wird 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) OR 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 also ein Dokument das Wort Pflaume, aber weder Apfel noch Birne enthält, gibt die erste Abfrage dies zurück, die zweite Abfrage jedoch nicht. Daher wird empfohlen, explizite Klammern für jede Abfrage zu verwenden, die AND und OR kombiniert, 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 einen Schlüsselwort (keyword) wie Autor oder Größe oder durch einen kanonischen Eigenschaftennamen wie System.DateModified festgelegt. Gültige Formulare für eine Eigenschaft sind wie folgt:

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

Ein Operator gibt einen Vorgang an, < z. B. oder =. 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. Gültige Formulare für eine Einschränkung sind wie folgt:

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

  • Für eine Zeichenfolgeneigenschaft wird der COP_WORD_STARTSWITH $< -Operator angenommen.
  • Für alle anderen Eigenschaften wird der operator COP_EQUAL = angenommen.

Für die programmgesteuerte Verwendung von AQS wird empfohlen, immer über einen expliziten Operator zu verfügen. Die gültige Form für die Suche nach einem einfachen Wert oder Wertbereich lautet wie folgt:

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

Ein einfacher Wert kann aus einem der folgenden Typen bestehen:

<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, die von Theresa oder Lee erstellt wurde und im Ordner MyDocs gespeichert wurde, kombiniert drei grundlegende Abfragen wie folgt:

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

Die drei grundlegenden Abfragen sind:

  • "letztes Quartal"
  • Autor:(Theresa OR lee)
  • ordner:MyDocs

Eine grundlegende Abfrage, die kanonische Syntax verwendet, ist:

System.Size:>1kb

Eigenschaften

Eigenschaften werden von einem Schlüsselwort (keyword) verwiesen, bei dem es sich in Windows 7 und höher um einen kanonischen Eigenschaftennamen handeln kann. AQS in der Windows-Benutzeroberfläche kann die Bezeichnung anstelle des kanonischen Eigenschaftennamens verwenden, z. B. author anstelle von System.Author. In Windows Vista und früheren Versionen war es möglich, englische Bezeichnungen unabhängig von der Sprache der Benutzeroberfläche 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 arbeitet 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 kanonische Datums- und Uhrzeitformat, das von ISO-8601 angegeben wird, optional einschließlich der UTC-Zeitzone.

  • Windows 8 und früher, Datum/Uhrzeit ohne UTC-Zeitzone:YYYY-MM-TTThh:mm:ss

    Dieses Format gibt eine Ortszeit an, unabhängig vom Benutzer- oder Systemgebietsschema.

  • Windows 8, Datum/Uhrzeit mit UTC-Zeitzone:JJJJ-MM-TTThh: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 mnemonische 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 eine kanonische Schlüsselwort (keyword), und der mnemonische Wert für die System.Author-Eigenschaft ist z. B. Author. Die Einführung von kanonischen Schlüsselwörtern kompensiert die Tatsache, dass englische mnemonische Schlüsselwörter nicht mehr überall auf allen Betriebssystemen unabhängig von der Sprache erkannt werden, wie dies in Windows Vista und früher 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 die aktuelle Standardeinstellung. Es wird empfohlen, dass Entwickler immer 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. Ein Beispiel für eine Abfrage mit einer kanonischen Eigenschaft ist 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 kanonische Syntax verwenden, um AQS-Abfragen programmgesteuert zu generieren. Wenn Sie keine kanonische Syntax verwenden und Ihre Anwendung in einem Gebietsschema oder einer anderen Benutzeroberflächensprache als der Sprache im Anwendungscode bereitgestellt wird, werden Ihre Abfragen nicht ordnungsgemäß interpretiert.

Die Konventionen für kanonische Schlüsselwort (keyword) Syntax sind wie folgt:

  • Die kanonische Syntax für eine Eigenschaft ist der kanonische Name, z System.Photo.LightSource. B. . Bei kanonischen Namen wird die Groß-/Kleinschreibung nicht beachtet.
  • Die kanonische Syntax für die booleschen Operatoren besteht aus den Schlüsselwörtern AND, OR und NOT in Großbuchstaben.
  • Die Operatoren <, >, =und so weiter sind nicht lokalisiert und daher auch Teil der kanonischen Syntax.
  • Wenn eine Eigenschaft P enumerierte Werte oder Bereiche mit dem Namen N₁ bis Nk aufweist, ist die kanonische Syntax für den I-ten-Wert oder -Bereich der kanonische Name für P, gefolgt vom Zeichen #, gefolgt von NI, wie im folgenden Beispiel dargestellt:
    • System.Photo.LightSource#Daylight, System.Photo.LightSource#StandardAusw.
  • 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-Ten-Wert oder -Bereich der kanonische Name für T, gefolgt vom Zeichen #, gefolgt von NI, wie im folgenden Beispiel veranschaulicht:
    • 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

In Windows 7 und höher gibt es keine kanonische Syntax für Zahlen. Da Gleitkommaformate je nach Gebietsschema variieren, wird die Verwendung einer kanonischen Abfrage, die eine Gleitkommakonstante umfasst, nicht unterstützt. Ganzzahlige Konstanten können dagegen nur mit Ziffern geschrieben werden (keine Trennzeichen für Tausender) 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 deren 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 Priority-Eigenschaft 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#TrueUnd System.IsDeleted:System.StructuredQueryType.Boolean#False
Numerisch System.Size
Es ist nicht möglich, eine kanonische Abfrage, die eine Gleitkommakonstante umfasst, sicher zu schreiben, da Gleitkommaformate je nach Gebietsschema variieren. Ganze Zahlen müssen ohne Trennzeichen für Tausende geschrieben werden. Zum Beispiel:
System.Size:<12345

 

Weitere Informationen zu kanonischen Eigenschaften und dem Eigenschaftensystem im Allgemeinen finden Sie unter Systemeigenschaften. Alternativ finden Sie informationen zu den öffentlichen Headerdateien.

Abfrageoperatoren

Wenn eine Eigenschaft, p, mehrere Werte für ein Element aufweist, gibt eine AQS-Abfrage für p:<restr> das Element zurück, wenn <restr> für mindestens einen der Werte true 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 jeder 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.

Betreiber Symbol Beispiel BESCHREIBUNG
COP_EQUAL =
System.FileExtension:=".txt"
Der Wert ist die Zeichenfolge ".txt".
COP_NOTEQUAL
-
<>
NICHT
- -
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 hat einen Wert.
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. Daher ist System.Kind:- -picture gleichwertig mit System.Kind:-picture und System.Kind:NOT picture.
COP_LESSTHAN <
System.Size:<1kb
Dieser Wert ist kleiner als 1 KB.
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Today
Dieser Wert ist größer als heute.
COP_LESSTHANOREQUAL <=

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

System.Size:>=1kb
Dieser Wert ist gleich oder größer als 1 KB.
COP_VALUE_STARTSWITH ~<
System.FileName:~<"C++ Primer"
Sucht Nach Elementen, 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 entspricht z. B. "ground rules".
Sucht alle Elemente mit einer Autosummary, die die Zeichen rund enthält.
COP_VALUE_NOTCONTAINS ~!
System.Author:~!" sanjay"
Findet Autoren, die nicht über die Zeichenfolge "sanjay" verfügen.
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
Sucht Dateien, bei denen der Dateiname mit Mic beginnt, gefolgt von einem Zeichen, gefolgt von osoft w, gefolgt von allen Zeichen, die mit d enden.
Mit dem Zeichen „?“ und * Zeichen werden nicht wörtlich interpretiert und funktionieren wie PLATZHALTERzeichen im DOS-Stil:
  • ? 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. Auf das 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 nach einem Element, in dem Autor ein Wort enthält, das mit den Zeichen "San" beginnt.
Sucht eine Beliebige Datei, in der der Dateiname ein Wort enthält, das mit micro beginnt, gefolgt von einem Wort, das mit "exe" beginnt.

 

¹ Leere eckige Klammern ([]) bezeichnen "kein Wert".

Bei Zeichenfolgeneigenschaften ist der Standardvorgang entweder COP_WORD_STARTS_WITH oder COP_WORD_EQUAL.

Abfragewerte

Nützliche Beispiele, wie Abfragewerte eingeschränkt werden können, sind in der folgenden Tabelle aufgeführt.

Wert/Symbol Beispiele BESCHREIBUNG
String auto
Jede Sequenz von Zeichen, nach der 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.
Anführungszeichenzeichenfolge "" "Schlussfolgerungen: gültig" Das ""blue"-Team"
Beliebige Zeichenfolge. Die Zeichenfolge wird nicht als Teil der Syntax interpretiert.
Anführungszeichen können in eine Abfrage eingefügt werden, wenn sie verdoppelt werden. In diesem Beispiel wird das "blaue" Team gesucht.
Integer 5678
Verwenden Sie nur Ziffern für ganze Zahlen. Verwenden Sie keine Trennzeichen für Tausende.
Gleitkommazahl 5678.1234
Da Gleitkommaformate je nach Gebietsschema variieren, kann eine kanonische Abfrage keine Gleitkommakonstante verwenden. Die Verwendung der kanonischen Syntax mit Gleitkommazahlen ist nicht sicher.
Boolean true/false System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
Der TRUE Boolean-Wert.
Der WERT FALSE Boolean.
[] 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 15.10.2002 19:00
Findet Elemente mit dem Datum 26. Januar 2010.
Findet Elemente, die am 15. Oktober 2002 zwischen 19:00:00 Uhr und 19:00:59 Uhr geändert wurden.

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


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

Hinweis:
Neben der Suche nach bestimmten Datums- und Datumsbereichen erkennt AQS relative Datumswerte (z. B . heute, morgen, nächste Woche, nächste Woche, nächster Monat) und Tag (z. B. Dienstag oder Montag). Mittwoch) und Monat (Februar).


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb.. 10 KB
Doppelte Perioden geben einen Wertbereich an. Findet Elemente mit einem Datum zwischen dem 11.05.04 und dem 11.10.04, einschließlich.
Findet Elemente zwischen 5 und 10 KB Größe.

 

Bereichseinschränkungen

Benutzer können den Bereich ihrer Suchvorgänge auf bestimmte Ordnerspeicherorte oder Datenspeicher beschränken. Wenn Sie beispielsweise mehrere E-Mail-Konten verwenden und eine Abfrage entweder auf Microsoft Outlook oder Microsoft Outlook Express beschränken möchten, können Sie bzwSystem.Search.Store:oe. verwendenSystem.Search.Store:mapi. Die folgende Tabelle zeigt einige Beispiele zum Einschränken einer Suche nach Datenspeicher.

Einschränken der Suche nach Datenspeicher Stichwort Beispiel
Dateien file 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 dem lokalen 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 Abrufen von dynamischem Verhalten für statische Verben mithilfe der erweiterten Abfragesyntax unter Erstellen von Kontextmenühandlern.
  • AQS-Abfragen können auf bestimmte Dateitypen beschränkt werden, die als Dateitypen bezeichnet werden. Weitere Informationen finden Sie unter Dateitypen und Zuordnungen. Die Dokumentation zu Eigenschaftenreferenzen finden Sie unter System.Kind und System.KindText.

Programm gesteuertes Abfragen des Indexes

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

Abfragen des Index mit ISearchQueryHelper

Abfragen des Index mit dem Search-ms-Protokoll

Abfragen des Indexes mit der SQL-Syntax von Windows Search