Durchführen einer AQS-Suche mithilfe von EWS in ExchangePerform an AQS search by using EWS in Exchange

Erfahren Sie, wie Sie mit Abfragezeichenfolgen und AQS in ihrer verwaltete EWS-API-oder EWS-Anwendung suchen.Find out how to search with query strings and AQS in your EWS Managed API or EWS application.

Abfragezeichenfolgen bieten eine Alternative zu Suchfiltern zum Ausdrücken von Suchkriterien.Query strings provide an alternative to search filters for expressing search criteria. Der größte Vorteil bei der Verwendung von Abfragezeichenfolgen besteht darin, dass Sie keine einzelne zu durchsuchende Eigenschaft angeben müssen.The biggest advantage to using query strings is that you are not required to specify a single property to search. Sie können nur einen Wert angeben, und die Suche wird auf alle häufig verwendeten Felder in den Elementen angewendet.You can just provide a value, and the search will apply to all commonly used fields on the items. Sie können die Suche auch verfeinern, indem Sie die Erweiterte Abfrage Syntax (AQS) anstelle eines einfachen Werts verwenden.You can also refine your search by using Advanced Query Syntax (AQS) instead of a simple value. Abfragezeichenfolgen weisen jedoch die folgenden Einschränkungen auf, die Sie kennen sollten, bevor Sie sie ihrer Toolbox hinzufügen:However, query strings have the following limitations that you should be aware of before you add them to your toolbox:

  • Beschränkte Fähigkeit zum Durchsuchen bestimmter Eigenschaften.Limited ability to search specific properties. Wenn Sie mit einem einfachen Wert in einer Abfragezeichenfolge suchen, wird die Suche für alle indizierten Eigenschaften ausgeführt.When you search with a simple value in a query string, the search is performed against all indexed properties. Sie können die Suche auf bestimmte Eigenschaften verfeinern, die verfügbaren Eigenschaften in einer AQS-Zeichenfolge sind jedoch limitiert.You can refine your search to specific properties, but the properties available to use in an AQS string are limited. Wenn die Eigenschaft, die Sie durchsuchen möchten, nicht zu den Eigenschaften gehört, die für AQS verfügbar sind, sollten Sie einen Suchfilter verwenden.If the property you want to search isn't one of the properties that are available for AQS, consider using a search filter.

  • Benutzerdefinierte Eigenschaften werden nicht durchsucht.Custom properties aren't searched. Abfragezeichen folgen suchen werden für einen Index ausgeführt, und benutzerdefinierte Eigenschaften sind nicht in diesem Index enthalten.Query string searches are performed against an index, and custom properties are not included in that index. Wenn Sie benutzerdefinierte Eigenschaften durchsuchen müssen, verwenden Sie stattdessen einen Suchfilter.If you need to search custom properties, use a search filter instead.

  • Beschränkte Steuerung für Zeichenfolgensuchen.Limited control for string searches. Bei Abfragezeichen folgen suchen wird Case immer ignoriert, und es werden immer unter Zeichenfolgen Suchvorgänge durchsucht.Query string searches always ignore case, and are always substring searches. Wenn Sie die Suche nach Groß-/Kleinschreibung, Präfix oder exakte Übereinstimmung durchführen möchten, verwenden Sie einen Suchfilter.If you want to do case-sensitive, prefix, or exact match searches, use a search filter.

  • Nicht verfügbar für Ordner oder Suchordner.Not available for folders or search folders. Die EWS-Vorgänge für die Suche nach Ordnern unterstützen nicht die Verwendung einer Abfragezeichenfolge.The EWS operations for searching for folders don't support using a query string. Außerdem unterstützen Suchordner keine Abfragezeichenfolgen.Additionally, search folders don't support query strings. In beiden Fällen ist ein Suchfilter die einzige Option.In both cases, a search filter is your only option.

Erstellen einer AbfragezeichenfolgeCreating a query string

Abfragezeichenfolgen im verwaltete EWS-API und EWS werden als Teilmenge der AQS-Syntax interpretiert.Query strings in the EWS Managed API and EWS are interpreted as a subset of AQS syntax. AQS-Zeichenfolgen bestehen entweder aus Werten oder aus Schlüsselwort/Wert-Paaren, getrennt durch einen Doppelpunkt (:).AQS strings are composed of either values or keyword/value pairs, separated by a colon (:).

keyword:value

Wenn ein Wert ohne Schlüsselwort angegeben wird, werden alle indizierten Eigenschaften nach dem Wert durchsucht.When a value is specified without a keyword, all indexed properties are searched for the value. Wenn ein Schlüsselwort mit einem Wert gekoppelt wird, gibt das Schlüsselwort eine Eigenschaft zum Suchen nach dem entsprechenden Wert an.If a keyword is paired with a value, the keyword specifies a property to search for the corresponding value.

Tabelle 1. Unterstützte AQS-SchlüsselwörterTable 1. Supported AQS keywords

SchlüsselwortKeyword WerttypValue type BeispielExample
Betreffsubject
ZeichenfolgeString
Betreff: Projectsubject:project
bodybody
ZeichenfolgeString
Body: Verkaufszahlenbody:sales figures
attachmentattachment
ZeichenfolgeString
Anlage: Berichtattachment:report
into
ZeichenfolgeString
an: "Sadie Daniels"to:"Sadie Daniels"
Vonfrom
ZeichenfolgeString
von: Hopefrom:hope
cccc
ZeichenfolgeString
cc: "Ronnie Kardinal"cc:"Ronnie Sturgis"
bccbcc
ZeichenfolgeString
BCC: Mackbcc:mack
participantsparticipants
ZeichenfolgeString
Teilnehmer: Sadieparticipants:sadie
categorycategory
StringString
Kategorie: Projectcategory:project
Wichtigkeitimportance
StringString
Wichtigkeit:Hochimportance:high
kindkind
ElementtypItem type
Art: Besprechungenkind:meetings
sentsent
DatumDate
gesendet: 12/10/2013sent:12/10/2013
receivedreceived
DatumDate
empfangen: Gesternreceived:yesterday
hatanlagehasattachment
BooleanBoolean
Has-Anlage: trueHas attachment:true
isflagedisflagged
BooleanBoolean
isflaged: trueisflagged:true
isreadisread
BooleanBoolean
isread: falseisread:false
sizesize
NummerNumber
Größe: > 5000size:>5000

Werfen wir einen Blick auf die Funktionsweise der unterschiedlichen Wertetypen.Let's take a look at how the different value types work.

Verwenden eines Zeichenfolgen WerttypUsing a string value type

Zeichenfolgenwerte Typen werden standardmäßig als Präfix-Teil Zeichenfolgensuche durchsucht, bei denen die Groß-/Kleinschreibung nicht beachtet wird.String value types are by default searched as prefix substring searches that are not case-sensitive. Das bedeutet, dass die Suche nach Subject: Project mit einem der folgenden Themen übereinstimmen würde:That means that searching for subject:project would match any of the following subjects:

  • Projekt-BesprechungsnotizenProject meeting notes

  • Haben Sie die Projektpläne?Do you have the project plans?

  • Verkaufsprognosen im DezemberDecember sales projections

Sie können die Suche so ändern, dass das ganze Wort statt übereinstimmender Präfixe erforderlich ist, indem Sie die Zeichenfolge in Anführungszeichen einschließen.You can change the search to require the whole word rather than matching prefixes by enclosing the string in quotation marks. Durchsuchen des Betreffs: "Project" würde den Wert "Dezember Sales Projektionen" aus der Liste der Übereinstimmungen ausschließen.Searching for subject:"project" would eliminate the "December sales projections" value from the list of matches. Beachten Sie, dass bei dem Wert weiterhin die Groß-/Kleinschreibung beachtet wird.Note that the value is still not case-sensitive.

Wenn Sie mehrere Wörter in einer Abfragezeichenfolge verwenden, erfordert eine Übereinstimmung, dass beide Wörter in den durchsuchten Feldern angezeigt werden.If you use multiple words in a query string, a match requires that both words appear in the searched fields. Beispielsweise würde die Suche nach Subject: Project Plan mit einem der folgenden Themen übereinstimmen:For example, searching for subject:project plan would match any of the following subjects:

  • ProjektplanProject plan

  • Haben Sie die Projektpläne?Do you have the project plans?

  • Bitte senden Sie mir den Plan für unser ProjektPlease send me the plan for our project

  • Planen von ProjektmeilensteinenPlanning project milestones

Wenn Sie mehrere Wörter in Anführungszeichen einschließen, werden Sie als einzelne Phrase behandelt.If you enclose multiple words in quotation marks, they are treated as a single phrase. Die Suche nach Betreff: "Projektplan" würde nur dem Betreff "Projektplan" aus der vorherigen Liste entsprechen.Searching for subject:"project plan" would only match the "Project plan" subject from the previous list.

Verwenden eines Werttyp Werts für den Typ "Item"Using an item type value type

Sie können die folgenden Elementtyp Werte mit dem Schlüsselwort Kind verwenden, um die Suchergebnisse auf einen bestimmten Elementtyp wie e-Mail oder Besprechungsanfragen einzuschränken:You can use the following item type values with the kind keyword to limit your search results to only a specific type of item, such as email or meeting requests:

  • contactscontacts
  • docsdocs
  • emailemail
  • faxesfaxes
  • Chat (entspricht Chatnachrichten)im (corresponds to instant messages)
  • journalsjournals
  • Besprechungen (entspricht Terminen und Besprechungsanfragen)meetings (corresponds to appointments and meeting requests)
  • notesnotes
  • postsposts
  • rssfeedsrssfeeds
  • taskstasks
  • voicemailvoicemail

Verwenden eines Datums WerttypUsing a date value type

Sie können Datumswert Typen auf verschiedene Weise durchsuchen.You can search date value types in a number of different ways. Am einfachsten ist die Suche nach einem bestimmten Datum.The simplest is to search for a specific date. Bei der Suche mit Received: 12/11/2013 werden alle Elemente zurückgegeben, die am 11. Dezember 2013 empfangen wurden.Searching with received:12/11/2013 will return all items received on December 11, 2013. Sie können jedoch auch nicht so spezifisch sein.However, you can also be less specific. Bei der Suche mit Received: 12/11 werden alle Elemente zurückgegeben, die am 11. Dezember des aktuellen Jahres empfangen wurden.Searching with received:12/11 will return all items received on December 11 of the current year.

Eine weitere Option besteht darin, die Monatsnamen zu verwenden.Another option is to use the month names. Sie können mit received suchen: 11. Dezember 2013 oder 11. Dezember, um die gleichen Ergebnisse wie empfangen zu erhalten: 12/11/2013 und Received: 12/11, beziehungsweise.You can search with received:December 11, 2013 or December 11 to get the same results as received:12/11/2013 and received:12/11, respectively. Sie können auch mit Received: Dezember suchen, um alle Elemente abzurufen, die im Monat Dezember im aktuellen Jahr empfangen wurden.You can also search with received:December to get all items received in the month of December, in the current year.

Die Verwendung der Namen der Wochentage ist ebenfalls eine Option.Using the names of the days of the week is also an option. Bei der Suche mit Received: Dienstag werden alle Elemente zurückgegeben, die am Dienstag der aktuellen Woche empfangen wurden.Searching with received:Tuesday will return all items received on Tuesday of the current week.

Datumswert Typen unterstützen auch eine Reihe von Schlüsselwörtern für Suchvorgänge relativ zur aktuellen Uhrzeit.Date value types also support a set of keywords for searches relative to the current time. Die folgenden Schlüsselwörter werden unterstützt:The following keywords are supported:

  • heutetoday
  • morgentomorrow
  • yesterdayyesterday
  • this weekthis week
  • Letzte Wochelast week
  • Nächster Monatnext month
  • vergangener Monatpast month
  • kommendes Jahrcoming year

Datumswert Typen können auch mit relationalen Operatoren wie größer als oder kleiner als oder als Bereich mit dem Range-Operator angegeben werden ... Angenommen: > 11/30/2013, Sent: > = Yesterday und Received: 12/1/2013.. heute sind alle gültigen Abfragezeichenfolgen.Date value types can also be compared with relational operators like greater than or less than, or specified as a range with the range operator ... For example, received:>11/30/2013, sent:>=yesterday, and received:12/1/2013..today are all valid query strings.

Verwenden eines Werts vom Typ BooleanUsing a Boolean value type

Boolesche Wertetypen können "true" oder "false" lauten.Boolean value types can be "true" or "false". Bei den Werten wird die Groß-/Kleinschreibung nicht beachtet, daher erzeugt isread: false dieselben Ergebnisse wie isread: false.The values are not case-sensitive, so isread:false will produce the same results as isread:FALSE.

Verwenden eines Zahlen WerttypUsing a number value type

Zahl Wert Typen können als exakte Übereinstimmungen durchsucht werden, Sie können aber auch mithilfe relationaler Operatoren wie größer als oder kleiner als durchsucht werden.Number value types can be searched as exact matches, but they can also be searched using relational operators like greater than or less than. Beispielsweise gibt size: 10000 nur Elemente zurück, die eine Größe von genau 10000 Bytes aufweisen, aber size: > = 10000 gibt Elemente zurück, deren Größe größer als oder gleich 10000 Bytes ist.For example, size:10000 will return only items that have a size of exactly 10000 bytes, but size:>=10000 will return items that have a size greater than or equal to 10000 bytes. Sie können auch einen Bereich mithilfe des Bereichsoperators ( ..) angeben.You can also specify a range by using the range operator ( ..). Beispielsweise gibt size: 7000.. 8000 Elemente zurück, die eine Größe zwischen 7000 und 8000 haben.For example, size:7000..8000 will return items that have a size between 7000 and 8000.

Verwenden von logischen OperatorenUsing logical operators

Abfragezeichenfolgen unterstützen die folgenden logischen Operatoren.Query strings support the following logical operators.

Tabelle 2. Unterstützte logische OperatorenTable 2. Supported logical operators

OperatorOperator BeispieleExamples
UNDAND
Projekt und von: "Sadie Daniels"project AND from:"Sadie Daniels"
Subject: (Projekt und Plan)subject:(project AND plan)
ODEROR
Betreff: Meeting oder von: "Hope gross"subject:meeting OR from:"Hope Gross"
aus:("Sadie Daniels" oder "Hope gross")from:("Sadie Daniels" OR "Hope Gross")
NICHTNOT
Nicht von: "Ronnie McCulloch"NOT from:"Ronnie Sturgis"
empfangen: nicht heutereceived:NOT today

Beachten Sie, dass Sie diese Operatoren verwenden können, um mehrere Kriterien miteinander zu verknüpfen oder um mehrere Werte in einem einzelnen Schlüsselwort/Wert-Paar miteinander zu verbinden.Notice that you can use these operators to join multiple criteria together or to join multiple values within a single keyword/value pair together. Wenn Sie jedoch mehrere Werte in einem einzelnen Schlüsselwort/Wert-Paar verknüpfen, sollten Sie Klammern verwenden, um mehrere Werte einzuschließen.However, when joining multiple values in a single keyword/value pair, you should use parentheses to enclose the multiple values. Um zu verstehen, warum, sollten Sie die Suche mit von: "Sadie Daniels" oder "Hope gross".To understand why, consider searching with from:"Sadie Daniels" OR "Hope Gross". Diese Suche wird tatsächlich als die folgenden Kriterien interpretiert:This search actually is interpreted as the following criteria:

  • Das Element stammt aus Sadie Daniels oderThe item is from Sadie Daniels, OR

  • Das Element hat den Ausdruck "Hope gross" in einer seiner indizierten Eigenschaften.The item has the phrase "Hope Gross" in any of its indexed properties.

Im Gegensatz dazu wird aus:("Sadie Daniels" oder "Hope gross") als Folgendes interpretiert:In contrast, from:("Sadie Daniels" OR "Hope Gross") is interpreted as:

  • Das Element stammt aus Sadie Daniels oderThe item is from Sadie Daniels, OR

  • Das Element ist von der Hoffnung BruttoThe item is from Hope Gross

Der Standardoperator, wenn mehrere Kriterien angegeben werden, aber kein logischer Operator enthalten ist, ist und.The default operator when multiple criteria are specified but no logical operator is included is AND. Enthält beispielsweise Attachment: true Subject: Project entspricht has: Attachment: true und Subject: Project.For example, has attachment:true subject:project is equivalent to has:attachment:true AND subject:project.

Beispiel: Suchen von Elementen mithilfe einer Abfragezeichenfolge und der verwaltete EWS-APIExample: Find items by using a query string and the EWS Managed API

In diesem Beispiel wird eine Methode namens " SearchWithQueryString " definiert.In this example, a method called SearchWithQueryString is defined. Es benötigt ein Datei "ExchangeService -Objekt, ein WellKnownFolderName -Objekt und ein String -Objekt, das die Abfragezeichenfolge als Parameter darstellt.It takes an ExchangeService object, a WellKnownFolderName object, and a string object that represents the query string as parameters. In diesem Beispiel wird davon ausgegangen, dass das ExchangeService-Objekt mit gültigen Werten in den Credentials- und Url-Eigenschaften initialisiert wurde.This example assumes that the ExchangeService object has been initialized with valid values in the Credentials and Url properties.

using Microsoft.Exchange.WebServices.Data;
static void SearchWithQueryString(ExchangeService service, WellKnownFolderName folder, string queryString)
{
    // Limit the result set to 10 items.
    ItemView view = new ItemView(10);
    view.PropertySet = new PropertySet(ItemSchema.Subject,
                                       ItemSchema.DateTimeReceived,
                                       ItemSchema.Size,
                                       ItemSchema.Importance,
                                       EmailMessageSchema.IsRead);
    // Item searches do not support Deep traversal.
    view.Traversal = ItemTraversal.Shallow;
    // Sorting
    view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
    try
    {
        // Execute the search based on the query string.
        // Example: "subject:project plan"
        FindItemsResults<Item> results = service.FindItems(folder, queryString, view);
        foreach (Item item in results.Items)
        {
            Console.WriteLine("Subject: {0}", item.Subject);
            Console.WriteLine("Received: {0}", item.DateTimeReceived.ToString());
            Console.WriteLine("Size: {0}", item.Size.ToString());
            Console.WriteLine("Importance: {0}", item.Importance.ToString());
            if (item is EmailMessage)
            {
                EmailMessage message = item as EmailMessage;
                Console.WriteLine("Read: {0}", message.IsRead.ToString());
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Exception while enumerating results: {0}", ex.Message);
    }
}

Sie können diese Methode verwenden, um nach allen Elementen mit dem Ausdruck "Projektplan" im Betreff zu suchen, wie in diesem Beispiel gezeigt.You can use this method to search for all items with the phrase "project plan" in the subject, as shown in this example.

string queryString = "subject:\"project plan\"";
SearchWithQueryString(service, WellKnownFolderName.Inbox, queryString);

Beispiel: Suchen von Elementen mithilfe einer Abfragezeichenfolge und EWSExample: Find items by using a query string and EWS

In diesem Beispiel findet eine SOAP- FindItem -Anforderung alle Elemente im Posteingang mit dem Ausdruck "Projektplan" im Betreff.In this example, a SOAP FindItem request finds all items in the Inbox with the phrase "project plan" in the subject.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013" />
  </soap:Header>
  <soap:Body>
    <m:FindItem Traversal="Shallow">
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="item:Subject" />
          <t:FieldURI FieldURI="item:DateTimeReceived" />
          <t:FieldURI FieldURI="item:Size" />
          <t:FieldURI FieldURI="item:Importance" />
          <t:FieldURI FieldURI="message:IsRead" />
        </t:AdditionalProperties>
      </m:ItemShape>
      <m:IndexedPageItemView MaxEntriesReturned="10" Offset="0" BasePoint="Beginning" />
      <m:SortOrder>
        <t:FieldOrder Order="Descending">
          <t:FieldURI FieldURI="item:DateTimeReceived" />
        </t:FieldOrder>
      </m:SortOrder>
      <m:ParentFolderIds>
        <t:DistinguishedFolderId Id="inbox" />
      </m:ParentFolderIds>
      <m:QueryString>subject:"project plan"</m:QueryString>
    </m:FindItem>
  </soap:Body>
</soap:Envelope>

Im folgenden Beispiel wird die Antwort vom Server mit den Suchergebnissen dargestellt.The following example shows the response from the server with the search results.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="712" MinorBuildNumber="22" Version="V2_3" 
        xmlns:h="https://schemas.microsoft.com/exchange/services/2006/types" 
        xmlns="https://schemas.microsoft.com/exchange/services/2006/types" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:FindItemResponse xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:FindItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootFolder IndexedPagingOffset="1" TotalItemsInView="1" IncludesLastItemInRange="true">
            <t:Items>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>project plan</t:Subject>
                <t:DateTimeReceived>2013-12-11T15:42:02Z</t:DateTimeReceived>
                <t:Size>7406</t:Size>
                <t:Importance>Normal</t:Importance>
                <t:IsRead>false</t:IsRead>
              </t:Message>
            </t:Items>
          </m:RootFolder>
        </m:FindItemResponseMessage>
      </m:ResponseMessages>
    </m:FindItemResponse>
  </s:Body>
</s:Envelope>

Siehe auchSee also