OData-Syntax von „$orderby“ in Azure KI Search

In Azure KI Search gibt der $orderby-Parameter eine benutzerdefinierte Sortierreihenfolge für Suchergebnisse an. In diesem Artikel wird die OData-Syntax von $orderby beschrieben, und es werden Beispiele bereitgestellt.

Feldpfadkonstruktion und -konstanten werden in der OData-Sprachübersicht in Azure KI Search beschrieben. Weitere Informationen zum Sortierverhalten finden Sie unter Sortieren von Ergebnissen.

Syntax

Der Parameter $orderby akzeptiert eine durch Trennzeichen getrennte Liste von bis zu 32 ORDER BY-Klauseln. Die Syntax einer ORDER BY-Klausel wird in der folgenden erweiterten Backus-Naur-Form (EBNF) veranschaulicht:

order_by_clause ::= (field_path | sortable_function) ('asc' | 'desc')?

sortable_function ::= geo_distance_call | 'search.score()'

Ein interaktives Syntaxdiagramm ist ebenfalls verfügbar:

Hinweis

Die vollständige EBNF finden Sie in der Referenz zur OData-Ausdruckssyntax für Azure KI Search.

Jede Klausel enthält Sortierkriterien, optional gefolgt von einer Sortierreihenfolge (asc = aufsteigend oder desc = absteigend). Wenn Sie keine Richtung angeben, wird die Standardeinstellung „asc“ (aufsteigend) verwendet. Wenn im Feld NULL-Werte vorhanden sind, werden NULL-Werte zuerst angezeigt, wenn die Sortierung asc lautet. Wenn die Sortierung desc lautet, werden sie an letzter Stelle angezeigt.

Bei den Sortierkriterien kann es sich entweder um den Pfad eines Felds vom Typ sortable oder um einen Aufruf der Funktion geo.distance oder search.score handeln.

In Zeichenfolgenfeldern werden die standardmäßigen Sortierreihenfolgen für ASCII und Unicode verwendet. Bei der Sortierung wird standardmäßig die Groß-/Kleinschreibung beachtet. Sie können jedoch einen Normalisierer verwenden, um den Text vor der Sortierung zu verarbeiten und dieses Verhalten zu ändern. Sie können auch einen asciifolding-Normalisierer verwenden, um Nicht-ASCII-Zeichen in deren ASCII-Entsprechung zu konvertieren, sofern vorhanden.

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 vom Typ Rating sortieren und drei Dokumente eine Bewertung von 4 aufweisen), werden Verknüpfungen auf Grundlage des Dokumentergebnisses in absteigender Reihenfolge getrennt. Wenn Dokumentergebnisse identisch sind (z. B. wenn in der Anforderung keine Volltextsuchabfrage angegeben ist), dann ist die relative Sortierung der verknüpften Dokumente unbestimmt.

Sie können mehrere Sortierkriterien angeben. Die Reihenfolge der Ausdrücke bestimmt die endgültige Sortierreihenfolge. Die Syntax zum absteigenden Sortieren nach Suchergebnis, gefolgt von der Bewertung lautet beispielsweise $orderby=search.score() desc,Rating desc.

Die Syntax für geo.distance in $orderby entspricht der Syntax 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.

Die Syntax für search.score in $orderby ist search.score(). Die Funktion search.score akzeptiert keine Parameter.

Beispiele

Sortieren von Hotels in aufsteigender Reihenfolge nach Basistarif:

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

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

    $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. Bei zwei Hotels mit identischen Relevanzbewertungen und Bewertungen wird das nächstgelegene zuerst aufgeführt:

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

Siehe auch