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ć sortable
wartość .
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