Sdílet prostřednictvím


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:

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 sortabletaké .

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

Viz také