Składnia $orderby OData w usłudze Azure AI Search

W usłudze Azure AI Search parametr $orderby określa niestandardową kolejność sortowania wyników wyszukiwania. W tym artykule opisano składnię OData $orderby i przedstawiono przykłady.

Konstrukcja i stałe ścieżki pola są opisane w omówieniu języka OData w usłudze Azure AI Search. Aby uzyskać więcej informacji na temat zachowań sortowania, zobacz Porządkowanie wyników.

Składnia

Parametr $orderby akceptuje rozdzielaną przecinkami listę maksymalnie 32 klauzul order-by. Składnia klauzuli order-by jest opisana przez następujący formularz EBNF (Rozszerzony formularz Backus-Naur):

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

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

Dostępny jest również interakcyjny diagram składni:

Uwaga

Zobacz dokumentację składni wyrażeń OData dla usługi Azure AI Search , aby zapoznać się z pełną pełną NF.

Każda klauzula ma kryteria sortowania, opcjonalnie następuje kierunek sortowania (asc dla rosnącej lub desc malejącej). Jeśli nie określisz kierunku, wartość domyślna to rosnąco. Jeśli w polu znajdują się wartości null, wartości null są wyświetlane jako pierwsze, jeśli sortowanie to asc i ostatnie, jeśli sortowanie to desc.

Kryteria sortowania mogą być ścieżką sortable pola lub wywołaniem funkcji geo.distance lub search.score .

W przypadku pól ciągów zostanie użyta domyślna kolejność sortowania ASCII i domyślna kolejność sortowania Unicode. Domyślnie sortowanie uwzględnia wielkość liter, ale można użyć normalizatora , aby wstępnie przetworzyć tekst przed sortowaniem, aby zmienić to zachowanie. Można również użyć normalizatora asciifolding , aby przekonwertować znaki inne niż ASCII na ich odpowiednik ASCII, jeśli istnieje.

Jeśli wiele dokumentów ma takie same kryteria sortowania, a search.score funkcja nie jest używana (na przykład jeśli sortujesz według pola liczbowego Rating i trzy dokumenty mają ocenę 4), powiązania zostaną przerwane według wyniku dokumentu w kolejności malejącej. Gdy wyniki dokumentu są takie same (na przykład w przypadku braku zapytania wyszukiwania pełnotekstowego określonego w żądaniu), względne uporządkowanie powiązanych dokumentów jest nieokreślone.

Można określić wiele kryteriów sortowania. Kolejność wyrażeń określa ostateczną kolejność sortowania. Na przykład aby posortować wynik malejąco, a następnie klasyfikację, składnia to $orderby=search.score() desc,Rating desc.

Składnia w geo.distance$orderby jest taka sama jak w $filter. W przypadku używania geo.distance w $orderby pole, do którego ma zastosowanie, musi mieć typ Edm.GeographyPoint i musi również mieć sortablewartość .

Składnia w search.score$orderby to search.score(). Funkcja search.score nie pobiera żadnych parametrów.

Przykłady

Sortuj hotele rosnąco według stawki bazowej:

    $orderby=BaseRate asc

Sortuj hotele malejąco według klasyfikacji, a następnie rosnąco według stawki bazowej (pamiętaj, że rosnąco jest wartością domyślną):

    $orderby=Rating desc,BaseRate

Sortuj hotele malejąco według klasyfikacji, a następnie rosnąco według odległości od podanych współrzędnych:

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

Sortuj hotele w kolejności malejącej według parametrów search.score i rating, a następnie w kolejności rosnącej według odległości od podanych współrzędnych. Między dwoma hotelami z identycznymi ocenami istotności i ocenami najbliższy jest wymieniony jako pierwszy:

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

Zobacz też