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
- Schlüsselwortverwendung in lokalen Sprachen
- Kanonische erweiterte Abfragesyntax in Windows 7
- Bereichseinschränkungen
- Weitere Ressourcen
- Zugehörige Themen
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#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-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#True Und 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:
|
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: |
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: |
.. | 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.
Verwandte Themen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für