Sintaxe de $orderby do OData no Azure AI Search

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

As constantes e a construção de caminho de campo são descritas na Visão geral da linguagem OData no Azure AI Search. Para obter mais informações sobre os comportamentos de classificação, confira Classificação de resultados.

Sintaxe

O parâmetro $orderby aceita uma lista separada por vírgulas de até 32 de cláusulas ordenadas por. A sintaxe de uma cláusula ordenar por é 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 interativa também está disponível:

Observação

Confira Referência de sintaxe de expressão OData para Azure AI Search para ver a EBNF completa.

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

Os critérios de classificação podem ser o caminho de um campo sortable ou uma chamada parageo.distance ou as funçõessearch.score.

Para campos de cadeia de caracteres, serão usadas a Ordem de classificação ASCII padrão e a Ordem de classificação unicode padrão. A classificação diferencia maiúsculas de minúsculas por padrão, mas você pode usar um normalizador para processar previamente o texto antes da classificação para alterar esse comportamento. Você também pode usar um normalizador asciifolding para converter caracteres não ASCII em seu equivalente ASCII, se houver.

Se vários documentos têm os mesmos critérios de classificação e a função search.score não é usada (por exemplo, se você classificar por um campo Rating numérico e três documentos têm uma classificação de 4), os empates são resolvidos pela pontuação do documento em ordem decrescente. Quando as pontuações do documento são as mesmas (por exemplo, quando não há consulta de pesquisa de texto completo especificada na solicitação), então a ordenação relativa dos documentos empatados é 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 em ordem decrescente pela pontuação, seguida pela Classificação, a sintaxe é $orderby=search.score() desc,Rating desc.

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

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

Exemplos

Organizar os hotéis em ordem crescente por taxa base:

    $orderby=BaseRate asc

Organizar os hotéis em ordem decrescente por classificação e, em seguida, em ordem crescente por taxa base (lembre-se de que a ordem crescente é o padrão):

    $orderby=Rating desc,BaseRate

Classificar hotéis em ordem decrescente por classificação e, em seguida, em ordem crescente por distância das coordenadas fornecidas:

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

Classificar hotéis em ordem decrescente por search.score e classificação e, em seguida, em ordem crescente por distância das coordenadas determinadas. 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

Confira também