Syntaxe $orderby OData ve službě Azure AI Search
Ve službě Azure AI Search určuje parametr $orderby vlastní pořadí řazení výsledků hledání. Tento článek popisuje syntaxi OData $orderby a poskytuje příklady.
Konstrukce a konstanty cesty pole jsou popsány v přehledu jazyka OData ve službě Azure AI Search. Další informace o chování řazení naleznete v tématu Řazení výsledků.
Syntaxe
Parametr $orderby přijímá čárkami oddělený seznam až 32 klauzulí order-by. Syntaxe klauzule order-by je popsaná v následujícím formátu EBNF (Extended Backus-Naur Form):
order_by_clause ::= (field_path | sortable_function) ('asc' | 'desc')?
sortable_function ::= geo_distance_call | 'search.score()'
K dispozici je také interaktivní diagram syntaxe:
Poznámka:
Úplný soubor EBNF najdete v referenčních informacích k syntaxi výrazů OData pro Azure AI Search .
Každá klauzule má kritéria řazení, volitelně následovaná směrem řazení (asc
vzestupně nebo desc
sestupně). Pokud nezadáte směr, výchozí hodnota je vzestupná. Pokud pole obsahuje hodnoty null, zobrazí se hodnoty null jako první, pokud je asc
řazení a poslední, pokud je desc
řazení .
Kritéria řazení můžou být cesta sortable
pole nebo volání geo.distance
search.score
funkcí.
Pro pole řetězců se použije výchozí pořadí řazení ASCII a výchozí pořadí řazení Unicode. Řazení ve výchozím nastavení rozlišují malá a velká písmena, ale před změnou tohoto chování můžete text předem zpracovat pomocí normalizátoru . Pokud existuje, můžete pomocí asciifolding
normalizátoru převést jiné znaky než ASCII na jejich ekvivalent ASCII.
Pokud má více dokumentů stejná kritéria řazení a search.score
funkce se nepoužívá (například pokud ho seřadíte podle číselného Rating
pole a tři dokumenty mají hodnocení 4), přeruší se vazby podle skóre dokumentu v sestupném pořadí. Pokud jsou skóre dokumentu stejné (například pokud v požadavku není zadaný žádný fulltextový vyhledávací dotaz), je relativní pořadí vázaných dokumentů neurčité.
Můžete zadat více kritérií řazení. Pořadí výrazů určuje konečné pořadí řazení. Pokud chcete například seřadit sestupně podle skóre a potom ratingu, syntaxe by byla $orderby=search.score() desc,Rating desc
.
Syntaxe pro geo.distance
$orderby je stejná jako v $filter. Při použití geo.distance
v $orderby musí být pole, na které se vztahuje, typu Edm.GeographyPoint
a musí být sortable
také .
Syntaxe pro search.score
$orderby je search.score()
. Funkce search.score
nepřebírají žádné parametry.
Příklady
Seřaďte hotely vzestupně podle základní sazby:
$orderby=BaseRate asc
Seřaďte hotely sestupně podle hodnocení a potom vzestupně podle základní sazby (mějte na paměti, že vzestupné je výchozí):
$orderby=Rating desc,BaseRate
Seřaďte hotely sestupně podle hodnocení a potom vzestupně podle vzdálenosti od daných souřadnic:
$orderby=Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc
Seřaďte hotely v sestupném pořadí podle výsledků hledání.skóre a hodnocení a potom ve vzestupném pořadí podle vzdálenosti od daných souřadnic. Mezi dvěma hotely s identickými skóre a hodnoceními podle relevance je jako první uveden nejbližší:
$orderby=search.score() desc,Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc