OData-Ausdruckssyntax für Filter und Sortierklauseln in Azure SearchOData expression syntax for filters and order-by clauses in Azure Search

Azure Search unterstützt eine Teilmenge der OData-Ausdruckssyntax für $filter- und $orderby-Ausdrücke.Azure Search supports a subset of the OData expression syntax for $filter and $orderby expressions. Filterausdrücke werden während der Analyse der Abfrage ausgewertet. Sie beschränken die Suche auf bestimmte Felder oder fügen Übereinstimmungskriterien hinzu, die während Indexscans verwendet werden.Filter expressions are evaluated during query parsing, constraining search to specific fields or adding match criteria used during index scans. Sortierausdrücke werden als Nachverarbeitungsschritt auf ein Resultset angewendet.Order-by expressions are applied as a post-processing step over a result set. Sowohl Filter als auch Sortierausdrücke sind in einer Abfrageanforderung enthalten und entsprechen unabhängig von der in einem search-Parameter verwendeten einfachen oder vollständigen Abfragesyntax der OData-Syntax.Both filters and order-by expressions are included in a query request, adhering to an OData syntax independent of the simple or full query syntax used in a search parameter. Dieser Artikel enthält die Referenzdokumentation für die in Filtern und Sortierausdrücken verwendeten OData-Ausdrücke.This article provides the reference documentation for OData expressions used in filters and sort expressions.

FiltersyntaxFilter syntax

Ein $filter-Ausdruck kann eigenständig als vollständig ausgedrückte Abfrage ausgeführt werden oder eine Abfrage mit zusätzlichen Parametern verfeinern.A $filter expression can execute standalone as a fully expressed query, or refine a query that has additional parameters. Die folgenden Beispiele veranschaulichen einige gängige Szenarien.The following examples illustrate a few key scenarios. Im ersten Beispiel ist der Filter der eigentliche Inhalt der Abfrage.In the first example, the filter is the substance of the query.

POST /indexes/hotels/docs/search?api-version=2019-05-06
    {
      "filter": "(baseRate ge 60 and baseRate lt 300) or hotelName eq 'Fancy Stay'"
    }

Ein weiterer häufiger Anwendungsfall ist die Kombination von Filtern mit Faceting. Dabei reduziert der Filter die Oberfläche der Abfrage auf Grundlage einer benutzergesteuerten Facettennavigationsauswahl:Another common use case is filters combined faceting, where the filter reduces the query surface area based on a user-driven facet navigation selection:

POST /indexes/hotels/docs/search?api-version=2019-05-06
    {
      "search": "test",
      "facets": [ "tags", "baseRate,values:80|150|220" ],
      "filter": "rating eq 3 and category eq 'Motel'"
    }

FilteroperatorenFilter operators

  • Logische Operatoren (AND, OR, NOT).Logical operators (and, or, not).

  • Vergleichsausdrücke (eq, ne, gt, lt, ge, le).Comparison expressions (eq, ne, gt, lt, ge, le). Bei Zeichenfolgenvergleichen wird die Groß-/Kleinschreibung beachtet.String comparisons are case-sensitive.

  • Konstanten der unterstützten Entity Data Model-Typen (EDM) (eine Liste der unterstützten Typen finden Sie unter Supported data types (Azure Search) (Unterstützte Datentypen für Azure Search)).Constants of the supported Entity Data Model (EDM) types (see Supported data types (Azure Search) for a list of supported types). Konstanten von Sammlungstypen werden nicht unterstützt.Constants of collection types are not supported.

  • Verweise auf Feldnamen.References to field names. In Filterausdrücken können nur Felder vom Typ filterable verwendet werden.Only filterable fields can be used in filter expressions.

  • any ohne Parameter.any with no parameters. Damit wird überprüft, ob ein Feld vom Typ Collection(Edm.String) Elemente enthält.This tests whether a field of type Collection(Edm.String) contains any elements.

  • any und all mit begrenzter Unterstützung für Lambdaausdrücke.any and all with limited lambda expression support.

    • any/all werden für Felder vom Typ Collection(Edm.String) unterstützt.any/all are supported on fields of type Collection(Edm.String).

    • any kann nur mit einfachen Gleichheitsausdrücken oder mit einer search.in-Funktion verwendet werden.any can only be used with simple equality expressions or with a search.in function. Einfache Ausdrücke bestehen aus einem Vergleich zwischen einem einzelnen Feld und einem Literalwert, z. B. Title eq 'Magna Carta'.Simple expressions consist of a comparison between a single field and a literal value, e.g. Title eq 'Magna Carta'.

    • all kann nur mit einfachen Ungleichheitsausdrücken oder mit einer not search.in-Funktion verwendet werden.all can only be used with simple inequality expressions or with a not search.in.

  • Geofunktionen geo.distance und geo.intersects.Geospatial functions geo.distance and geo.intersects. Die Funktion geo.distance gibt die Entfernung zwischen zwei Punkten in Kilometern zurück, wobei es sich bei einem Punkt um ein Feld und bei dem anderen Punkt um eine Konstante handelt, die als Teil des Filters übergeben wird.The geo.distance function returns the distance in kilometers between two points, one being a field and one being a constant passed as part of the filter. Die Funktion geo.intersects gibt TRUE zurück, wenn ein bestimmter Punkt innerhalb eines angegebenen Polygons liegt. Der Punkt ist hierbei ein Feld, und das Polygon wird als Konstante als Teil des Filters übergeben.The geo.intersects function returns true if a given point is within a given polygon, where the point is a field and the polygon is specified as a constant passed as part of the filter.

    Das Polygon ist eine zweidimensionale Fläche und wird als eine Reihe von Punkten gespeichert, die einen Begrenzungsring definieren (siehe unten stehendes Beispiel).The polygon is a two-dimensional surface stored as a sequence of points defining a bounding ring (see the example below). Das Polygon muss geschlossen sein, d. h. der erste und der letzte Punkt müssen identisch sein.The polygon needs to be closed, meaning the first and last point sets must be the same. Punkte in einem Polygon müssen entgegen dem Uhrzeigersinn angegeben werden.Points in a polygon must be in counterclockwise order.

    geo.distance gibt in Azure Search die Entfernung in Kilometern zurück.geo.distance returns distance in kilometers in Azure Search. Bei anderen Diensten, die OData-Geovorgänge unterstützen, werden dagegen meist Entfernungen in Metern zurückgegeben.This differs from other services that support OData geospatial operations, which typically return distances in meters.

    Hinweis

    Wenn Sie „geo.distance“ in einem Filter verwenden, müssen Sie die von der Funktion zurückgegebene Entfernung mithilfe von lt, le, gt oder ge mit einer Konstante vergleichen.When using geo.distance in a filter, you must compare the distance returned by the function with a constant using lt, le, gt, or ge. Die Operatoren eq und ne werden beim Vergleichen von Entfernungen nicht unterstützt.The operators eq and ne are not supported when comparing distances. Eine korrekte Syntax für „geo.distance“ sieht beispielsweise wie folgt aus: $filter=geo.distance(location, geography'POINT(-122.131577 47.678581)') le 5.For example, this is a correct usage of geo.distance: $filter=geo.distance(location, geography'POINT(-122.131577 47.678581)') le 5.

  • Die Funktion search.in testet, ob ein bestimmtes Zeichenfolgenfeld einem der Werte in einer angegebenen Liste entspricht.The search.in function tests whether a given string field is equal to one of a given list of values. Sie kann auch in Any- oder All-Ausdrücken verwendet werden, um einen einzelnen Wert eines Zeichenfolgensammlungsfelds mit einer Liste von Werten zu vergleichen.It can also be used in any or all to compare a single value of a string collection field with a given list of values. Die Gleichheit zwischen dem Feld und den einzelnen Werten in der Liste wird wie beim eq-Operator unter Berücksichtigung der Groß-/Kleinschreibung ermittelt.Equality between the field and each value in the list is determined in a case-sensitive fashion, the same way as for the eq operator. Ein Ausdruck wie search.in(myfield, 'a, b, c') entspricht daher myfield eq 'a' or myfield eq 'b' or myfield eq 'c', allerdings bietet search.in eine deutlich bessere Leistung.Therefore an expression like search.in(myfield, 'a, b, c') is equivalent to myfield eq 'a' or myfield eq 'b' or myfield eq 'c', except that search.in will yield much better performance.

    Der erste Parameter für die Funktion search.in ist der Verweis auf ein Zeichenfolgenfeld (oder eine Bereichsvariable für ein Zeichenfolgensammlungsfeld, sofern search.in innerhalb eines any- oder all- Ausdrucks verwendet wird).The first parameter to the search.in function is the string field reference (or a range variable over a string collection field in the case where search.in is used inside an any or all expression).

    Der zweite Parameter ist eine Zeichenfolge, die die Liste der Werte enthält (getrennt durch Leerzeichen oder Kommas).The second parameter is a string containing the list of values, separated by spaces and/or commas.

    Der dritte Parameter ist eine Zeichenfolge, bei der jedes Zeichen oder jede Teilmenge der Zeichenfolge als Trennzeichen behandelt wird, wenn die Liste der Werte im zweiten Parameter analysiert wird.The third parameter is a string where each character of the string, or subset of this string is treated as a separator when parsing the list of values in the second parameter. Wenn Sie andere Trennzeichen als Leerzeichen und Kommas verwenden müssen, weil Ihre Werte diese Zeichen enthalten, können Sie einen optionalen dritten Parameter für search.in angeben.If you need to use separators other than spaces and commas because your values include those characters, you can specify an optional third parameter to search.in.

    Hinweis

    In manchen Szenarien muss ein Feld mit einer großen Anzahl von Konstantenwerten verglichen werden.Some scenarios require comparing a field against a large number of constant values. Beispielsweise kann es bei der Implementierung von Sicherheitseinschränkungen mit Filtern erforderlich sein, das Dokument-ID-Feld mit einer Liste von IDs zu vergleichen, auf die dem anfordernden Benutzer Lesezugriff gewährt wird.For example, implementing security trimming with filters might require comparing the document ID field against a list of IDs to which the requesting user is granted read access. In solchen Szenarien empfehlen wir ausdrücklich, die Funktion search.in anstelle einer komplizierten Disjunktion von Gleichheitsausdrücken zu nutzen.In scenarios like this we highly recommend using the search.in function instead of a more complicated disjunction of equality expressions. Verwenden Sie beispielsweise search.in(Id, '123, 456, ...') anstelle von Id eq 123 or Id eq 456 or .....For example, use search.in(Id, '123, 456, ...') instead of Id eq 123 or Id eq 456 or .....

    Bei der Verwendung von search.in ist eine Antwortzeit von unter einer Sekunde zu erwarten, wenn der zweite Parameter eine Liste von Hunderten oder Tausenden von Werten enthält.If you use search.in, you can expect sub-second response time when the second parameter contains a list of hundreds or thousands of values. Für die Anzahl von Elementen, die Sie an search.in übergeben können, gibt es keinen expliziten Grenzwert. Sie müssen jedoch nach wie vor die maximale Anforderungsgröße einhalten.Note that there is no explicit limit on the number of items you can pass to search.in, although you are still limited by the maximum request size. Die Wartezeit nimmt jedoch mit zunehmender Anzahl von Werten zu.However, the latency will grow as the number of values grows.

  • Die Funktion search.ismatch wertet die Suchabfrage als Teil eines Filterausdrucks aus.The search.ismatch function evaluates search query as a part of a filter expression. Die mit der Suchabfrage übereinstimmenden Dokumente werden im Resultset zurückgegeben.The documents that match the search query will be returned in the result set. Die folgenden Überladungen dieser Funktion sind verfügbar:The following overloads of this function are available:

    • search.ismatch(search)
    • search.ismatch(search, searchFields)
    • search.ismatch(search, searchFields, queryType, searchMode)

    Hierbei gilt:where:

    • search: Die Suchabfrage (in der einfachen oder vollständigen Abfragesyntax).search: the search query (in either simple or full query syntax).
    • queryType: „simple“ oder „full“. Der Standardwert ist „simple“.queryType: "simple" or "full", defaults to "simple". Gibt an, welche Abfragesprache im search-Parameter verwendet wurde.Specifies what query language was used in the search parameter.
    • searchFields: Durch Trennzeichen getrennte Liste von durchsuchbaren Feldern, in denen gesucht werden soll. Standardmäßig werden alle durchsuchbaren Felder im Index durchsucht.searchFields: comma-separated list of searchable fields to search in, defaults to all searchable fields in the index.
    • searchMode: „any“ oder „all“. Der Standardwert ist „any“.searchMode: "any" or "all", defaults to "any". Gibt an, ob für beliebige oder alle der Suchbegriffe Übereinstimmungen gefunden werden müssen, damit das Dokument in den Ergebnissen zurückgegeben wird.Indicates whether any or all of the search terms must be matched in order to count the document as a match.

    Alle der oben aufgeführten Parameter sind gleichwertig mit den entsprechenden Suchanforderungsparametern.All the above parameters are equivalent to the corresponding search request parameters.

  • Die Funktion search.ismatchscoring gibt ebenso wie die Funktion search.ismatch TRUE für Dokumente zurück, die mit der als Parameter übergebenen Suchabfrage übereinstimmen.The search.ismatchscoring function, like the search.ismatch function, returns true for documents that matched the search query passed as a parameter. Der Unterschied zwischen den beiden Funktionen besteht darin, dass die Relevanzbewertung der Dokumente, die mit der Abfrage search.ismatchscoring übereinstimmen, in die Gesamtbewertung des Dokuments einfließt, während sich die Dokumentbewertung im Fall von search.ismatch nicht ändert.The difference between them is that the relevance score of documents matching the search.ismatchscoring query will contribute to the overall document score, while in the case of search.ismatch, the document score won't be changed. Die folgenden Überladungen dieser Funktion sind verfügbar (mit den gleichen Parametern wie bei search.ismatch):The following overloads of this function are available with parameters identical to those of search.ismatch:

    • search.ismatchscoring(search)
    • search.ismatchscoring(search, searchFields)
    • search.ismatchscoring(search, searchFields, queryType, searchMode)

    Die Funktionen search.ismatch und search.ismatchscoring sind vollständig orthogonal zueinander und zur restlichen Filteralgebra.The search.ismatch and search.ismatchscoring functions are fully orthogonal with each other and the rest of the filter algebra. Dies bedeutet, dass beide Funktionen im selben Filterausdruck verwendet werden können.This means both functions can be used in the same filter expression.

Räumliche Abfragen und Polygone, die den 180. Längengrad umfassenGeospatial queries and polygons spanning the 180th meridian

Bei vielen Bibliotheken für räumliche Abfragen ist die Erstellung einer Abfrage, die den 180. Längengrad (nahe der Datumsgrenze) beinhaltet, entweder nicht oder nur mit einer Behelfslösung möglich (z. B. durch Aufteilung des Polygons in zwei Teile auf jeweils einer Seite des Längengrads).For many geospatial query libraries formulating a query that includes the 180th meridian (near the dateline) is either off-limits or requires a workaround, such as splitting the polygon into two, one on either side of the meridian.

In Azure Search funktionieren räumliche Abfragen mit dem 180. Längengrad wie erwartet, wenn die Form der Abfrage rechteckig ist und die Koordinaten von Längen- und Breitengrad an einem Rasterlayout ausgerichtet sind (z. B. geo.intersects(location, geography'POLYGON((179 65,179 66,-179 66,-179 65,179 65))').In Azure Search, geospatial queries that include 180-degree longitude will work as expected if the query shape is rectangular and your coordinates align to a grid layout along longitude and latitude (for example, geo.intersects(location, geography'POLYGON((179 65,179 66,-179 66,-179 65,179 65))'). Erwägen Sie andernfalls für nicht rechteckige oder nicht ausgerichtete Formen die Aufteilung des Polygons.Otherwise, for non-rectangular or unaligned shapes, consider the split polygon approach.

Einschränkungen der FiltergrößeFilter size limitations

Für die Größe und Komplexität der Filterausdrücke, die Sie an Azure Search senden können, gelten Grenzwerte.There are limits to the size and complexity of filter expressions that you can send to Azure Search. Die Grenzwerte basieren ungefähr auf der Anzahl von Klauseln in Ihrem Filterausdruck.The limits are based roughly on the number of clauses in your filter expression. Gut merken lässt sich, dass Sie bei Hunderten von Klauseln Gefahr laufen, an den Grenzwert zu erreichen.A good rule of thumb is that if you have hundreds of clauses, you are at risk of running into the limit. Wir empfehlen Ihnen, Ihre Anwendung so zu entwerfen, dass sie keine Filter unbegrenzter Größe erzeugt.We recommend designing your application in such a way that it does not generate filters of unbounded size.

Beispiele für FilterFilter examples

Suche nach allen Hotels mit einem Basistarif unter 200$ mit einer Bewertung von mindestens 4:Find all hotels with a base rate less than $200 that are rated at or above 4:

$filter=baseRate lt 200.0 and rating ge 4

Suche nach allen Hotels außer „Roach Motel“, die seit 2010 renoviert wurden:Find all hotels other than "Roach Motel" that have been renovated since 2010:

$filter=hotelName ne 'Roach Motel' and lastRenovationDate ge 2010-01-01T00:00:00Z

Suche nach allen Hotels mit einem Basistarif unter 200$, die seit 2010 renoviert wurden und einen datetime-Literalwert mit Zeitzoneninformationen für Pacific Normalzeit aufweisen:Find all hotels with a base rate less than $200 that have been renovated since 2010, with a datetime literal that includes time zone information for Pacific Standard Time:

$filter=baseRate lt 200 and lastRenovationDate ge 2010-01-01T00:00:00-08:00

Suche nach allen Hotels, bei denen die Parkgebühren im Preis enthalten sind und Rauchen nicht erlaubt ist:Find all hotels that have parking included and do not allow smoking:

$filter=parkingIncluded and not smokingAllowed

- ODER -- OR -

$filter=parkingIncluded eq true and smokingAllowed eq false

Suche nach allen Hotels, die der Kategorie „Luxury“ angehören oder bei denen die Parkgebühren im Preis enthalten sind, mit einer Bewertung von 5:Find all hotels that are Luxury or include parking and have a rating of 5:

$filter=(category eq 'Luxury' or parkingIncluded eq true) and rating eq 5

Suche nach allen Hotels mit dem Tag „wifi“ (wobei für jedes Hotel Tags in einem Feld „Collection(EDM.String)“ gespeichert sind):Find all hotels with the tag "wifi" (where each hotel has tags stored in a Collection(Edm.String) field):

$filter=tags/any(t: t eq 'wifi')

Suche nach allen Hotels ohne das Tag „motel“:Find all hotels without the tag "motel":

$filter=tags/all(t: t ne 'motel')

Suche nach allen Hotels mit beliebigen Tags:Find all hotels with any tags:

$filter=tags/any()

Suchen Sie alle Hotels, die keine Tags aufweisen:Find all hotels that don't have tags:

$filter=not tags/any()

Suche nach allen Hotels in einem Umkreis von 10 Kilometern von einem angegebenen Referenzpunkt (wobei „location“ ein Feld vom Typ „Edm.geographypoint“ ist):Find all hotels within 10 kilometers of a given reference point (where location is a field of type Edm.GeographyPoint):

$filter=geo.distance(location, geography'POINT(-122.131577 47.678581)') le 10

Suche nach allen Hotels in einem bestimmten Anzeigebereich, der als Polygon definiert ist (wobei „location“ ein Feld vom Typ „Edm.geographypoint“ ist).Find all hotels within a given viewport described as a polygon (where location is a field of type Edm.GeographyPoint). Beachten Sie, dass das Polygon geschlossen ist (der erste und der letzte Punkt müssen identisch sein), und die Punkte müssen entgegen dem Uhrzeigersinn aufgelistet sein.Note that the polygon is closed (the first and last point sets must be the same) and the points must be listed in counterclockwise order.

$filter=geo.intersects(location, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))')

Suche nach allen Hotels, bei denen das Feld „description“ keinen Wert enthält oder explizit auf NULL festgelegt ist:Find all hotels that either have no value in "description" field, or that value is explicitly set to null:

$filter=description eq null

Suche nach allen Hotels, deren Namen „Roach motel“ oder „Budget hotel“ entspricht.Find all hotels with name equal to either 'Roach motel' or 'Budget hotel'). Ausdrücke enthalten Leerzeichen, die Standardtrennzeichen sind.Phrases contain spaces, which is a default delimiter. Sie können ein alternatives Trennzeichen in einfachen Anführungszeichen als dritten Zeichenfolgenparameter angeben:You can specicfy an alternative delimiter in single quotes as the third string parameter:

$filter=search.in(name, 'Roach motel,Budget hotel', ',')

Suche nach allen Hotels, deren Namen „Roach motel“ oder „Budget hotel“ entspricht (getrennt durch „|“):Find all hotels with name equal to either Roach motel' or 'Budget hotel' separated by '|'):

$filter=search.in(name, 'Roach motel|Budget hotel', '|')

Suche nach allen Hotels mit dem Tag „wifi“ oder „pool“:Find all hotels with the tag 'wifi' or 'pool':

$filter=tags/any(t: search.in(t, 'wifi, pool'))

Suchen Sie eine Übereinstimmung mit Ausdrücken innerhalb einer Sammlung, z.B. „beheizte Handtuchhalter“ oder „Haartrockner inklusive“ in Tags.Find a match on phrases within a collection, such as 'heated towel racks' or 'hairdryer included' in tags.

$filter=tags/any(t: search.in(t, 'heated towel racks,hairdryer included', ','))

Suche nach allen Hotels ohne das Tag „motel“ oder „cabin“:Find all hotels without the tag 'motel' nor 'cabin':

$filter=tags/all(t: not search.in(t, 'motel, cabin'))

Suche nach Dokumenten mit dem Wort „waterfront“.Find documents with the word "waterfront". Diese Filterabfrage ist identisch mit einer Suchanforderung mit search=waterfront.This filter query is identical to a search request with search=waterfront.

$filter=search.ismatchscoring('waterfront')

Suche nach Dokumenten mit dem Wort „hostel“ und einer Bewertung größer oder gleich 4 oder Dokumenten mit dem Wort „motel“ und einer Bewertung von 5.Find documents with the word "hostel" and rating greater or equal to 4, or documents with the word "motel" and rating equal to 5. Beachten Sie, dass diese Anforderung nicht ohne die Funktion search.ismatchscoring ausgedrückt werden kann.Note, this request could not be expressed without the search.ismatchscoring function.

$filter=search.ismatchscoring('hostel') and rating ge 4 or search.ismatchscoring('motel') and rating eq 5

Suche nach Dokumenten ohne das Wort „luxury“:Find documents without the word "luxury".

$filter=not search.ismatch('luxury') 

Suche nach Dokumenten mit dem Ausdruck „ocean view“ oder einer Bewertung von 5.Find documents with the phrase "ocean view" or rating equal to 5. Die Abfrage search.ismatchscoring wird nur für die Felder hotelName und description ausgeführt.The search.ismatchscoring query will be executed only against fields hotelName and description. Beachten Sie, dass Dokumente, die nur der zweiten Klausel der Disjunktion entsprechen, ebenfalls zurückgegeben werden (Hotels mit einer Bewertung von 5).Note, documents that matched only the second clause of the disjunction will be returned too - hotels with rating equal to 5. Um deutlich zu machen, dass diese Dokumente mit keinem der bewerteten Teile des Ausdrucks übereinstimmen, werden sie mit einem Ergebnis von Null zurückgegeben.To make it clear those documents didn’t match any of the scored parts of the expression, they will be returned with score equal to zero.

$filter=search.ismatchscoring('"ocean view"', 'description,hotelName') or rating eq 5

Suche nach Dokumenten, die die Begriffe „hotel“ und „airport“ in einem Abstand von fünf Wörtern voneinander in der Beschreibung des Hotels sowie ein Rauchverbot enthalten.Find documents where the terms "hotel" and "airport" are within 5 words from each other in the description of the hotel, and where smoking is not allowed. Diese Abfrage verwendet die vollständige Lucene-Abfragesprache.This query uses the full Lucene query language.

$filter=search.ismatch('"hotel airport"~5', 'description', 'full', 'any') and not smokingAllowed 

SortiersyntaxOrder-by syntax

Der $orderby-Parameter akzeptiert eine durch Trennzeichen getrennte Liste von bis zu 32 Ausdrücken im Format sort-criteria [asc|desc].The $orderby parameter accepts a comma-separated list of up to 32 expressions of the form sort-criteria [asc|desc]. Bei den Sortierkriterien kann es sich entweder um den Namen eines Felds vom Typ sortable oder um einen Aufruf der Funktion geo.distance oder search.score handeln.The sort criteria can either be the name of a sortable field or a call to either the geo.distance or the search.score functions. Sie können asc oder desc verwenden, um die Sortierreihenfolge explizit anzugeben.You can use either asc or desc to explicitly specify the sort order. Die Standardreihenfolge ist aufsteigend.The default order is ascending.

Wenn für mehrere Dokumente die gleichen Sortierkriterien gelten und die Funktion search.score nicht verwendet wird (z. B. wenn Sie nach einem numerischen Feld rating sortieren und drei Dokumente eine Bewertung von 4 aufweisen), werden Verknüpfungen auf Grundlage des Dokumentergebnisses in absteigender Reihenfolge getrennt.If multiple documents have the same sort criteria and search.score function is not used (for example, if you sort by a numeric rating field and three documents all have a rating of 4), ties will be broken by document score in descending order. Wenn Dokumentergebnisse identisch sind (z. B. wenn in der Anforderung eine Nicht-Volltextsuchabfrage angegeben ist), ist die relative Sortierung der verknüpften Dokumente unbestimmt.When document scores are the same (for example, when there is no full-text search query specified in the request), then the relative ordering of the tied documents is indeterminate.

Sie können mehrere Sortierkriterien angeben.You can specify multiple sort criteria. Die Reihenfolge der Ausdrücke bestimmt die endgültige Sortierreihenfolge.The order of expressions determines the final sort order. Die Syntax zum Sortieren in absteigender Reihenfolge nach Suchergebnis und anschließend nach Bewertung lautet beispielsweise wie folgt: $orderby=search.score() desc,rating desc.For example, to sort descending by score, followed by rating, the syntax would be $orderby=search.score() desc,rating desc.

Die Syntax für geo.distance in $orderby entspricht der Syntax in $filter.The syntax for geo.distance in $orderby is the same as it is in $filter. Bei der Verwendung von geo.distance in $orderby muss das Feld, für das der Ausdruck gilt, vom Typ Edm.GeographyPoint und zudem sortable sein.When using geo.distance in $orderby, the field to which it applies must be of type Edm.GeographyPoint and it must also be sortable.

Die Syntax für search.score in $orderby ist search.score().The syntax for search.score in $orderby is search.score(). Die Funktion search.score akzeptiert keine Parameter.The function search.score does not take any parameters.

Beispiele für das SortierenOrder-by examples

Sortieren von Hotels in aufsteigender Reihenfolge nach Basistarif:Sort hotels ascending by base rate:

$orderby=baseRate asc

Sortieren von Hotels in absteigender Reihenfolge nach Bewertung und anschließend in aufsteigender Reihenfolge nach Basistarif (bedenken Sie, dass die Standardreihenfolge aufsteigend ist):Sort hotels descending by rating, then ascending by base rate (remember that ascending is the default):

$orderby=rating desc,baseRate

Sortieren von Hotels in absteigender Reihenfolge nach Bewertung und anschließend in aufsteigender Reihenfolge nach der Entfernung von den angegebenen Koordinaten:Sort hotels descending by rating, then ascending by distance from the given co-ordinates:

$orderby=rating desc,geo.distance(location, geography'POINT(-122.131577 47.678581)') asc

Sortieren von Hotels in absteigender Reihenfolge nach Suchergebnis und Bewertung und anschließend in aufsteigender Reihenfolge nach der Entfernung von den angegebenen Koordinaten, sodass von zwei Hotels mit identischen Bewertungen das nächstgelegene zuerst aufgeführt wird:Sort hotels in descending order by search.score and rating, and then in ascending order by distance from the given coordinates so that between two hotels with identical ratings, the closest one is listed first:

$orderby=search.score() desc,rating desc,geo.distance(location, geography'POINT(-122.131577 47.678581)') asc

Nicht unterstützte OData-SyntaxUnsupported OData syntax

  • Arithmetische AusdrückeArithmetic expressions

  • Funktionen (mit Ausnahme der Geofunktionen für Entfernung und Überschneidungen)Functions (except the distance and intersects geospatial functions)

  • any/all mit beliebigen Lambdaausdrückenany/all with arbitrary lambda expressions

Weitere InformationenSee also