Sintaxe $orderby OData no Azure AI Search

No Azure AI Search, o parâmetro $orderby especifica uma ordem de classificação personalizada para os resultados da pesquisa. Este artigo descreve a sintaxe OData de $orderby e fornece exemplos.

A construção e as constantes do caminho de campo são descritas na visão geral da linguagem OData no Azure AI Search. Para obter mais informações sobre comportamentos de classificação, consulte Ordenando resultados.

Sintaxe

O parâmetro $orderby aceita uma lista separada por vírgulas de até 32 cláusulas de ordem por ordem. A sintaxe de uma cláusula order-by é descrita pela seguinte EBNF (Extended Backus-Naur Form):

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

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

Um diagrama de sintaxe interativo também está disponível:

Nota

Consulte Referência de sintaxe de expressão OData para Azure AI Search para obter o EBNF completo.

Cada cláusula tem critérios de classificação, opcionalmente seguidos por uma direção de classificação (asc para ascendente ou desc para descendente). Se você não especificar uma direção, o padrão será ascendente. Se houver valores nulos no campo, os valores nulos aparecerão primeiro se a classificação for e por último se a classificação for ascdesc.

Os critérios de classificação podem ser o caminho de um sortable campo ou uma chamada para as funções ou para as geo.distancesearch.score funções.

Para campos de cadeia de caracteres, a ordem de classificação ASCII padrão e a ordem de classificação Unicode padrão serão usadas. Por padrão, a classificação diferencia maiúsculas de minúsculas, mas você pode usar um normalizador para pré-processar o texto antes de classificar para alterar esse comportamento. Você também pode usar um asciifolding normalizador para converter caracteres não-ASCII para seu equivalente ASCII, se existir.

Se vários documentos tiverem os mesmos critérios de classificação e a search.score função não for usada (por exemplo, se você classificar por um campo numérico Rating e três documentos tiverem todos uma classificação de 4), os laços serão quebrados pela pontuação do documento em ordem decrescente. Quando as pontuações dos documentos são as mesmas (por exemplo, quando não há nenhuma consulta de pesquisa de texto completo especificada na solicitação), a ordem relativa dos documentos vinculados é indeterminada.

Você pode especificar vários critérios de classificação. A ordem das expressões determina a ordem de classificação final. Por exemplo, para classificar decrescente por pontuação, seguida de Classificação, a sintaxe seria $orderby=search.score() desc,Rating desc.

A sintaxe para geo.distance in $orderby é a mesma que em $filter. Ao usar geo.distance em $orderby, o campo ao qual se aplica deve ser do tipo Edm.GeographyPoint e também deve ser sortable.

A sintaxe para search.score in $orderby é search.score(). A função search.score não usa nenhum parâmetro.

Exemplos

Ordenar hotéis ascendentes por tarifa base:

    $orderby=BaseRate asc

Classifique os hotéis decrescentes por classificação e, em seguida, ascendente por taxa básica (lembre-se de que ascendente é o padrão):

    $orderby=Rating desc,BaseRate

Ordene os hotéis descendo por classificação e, em seguida, ascendendo por distância a partir das coordenadas dadas:

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

Ordene os hotéis por ordem decrescente por search.score e classificação e, em seguida, por ordem crescente por distância das coordenadas fornecidas. Entre dois hotéis com pontuações e classificações de relevância idênticas, o mais próximo é listado primeiro:

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

Consulte também