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