Sintaxe de $orderby do OData no Pesquisa de IA do Azure 

Observação

Pesquisa de IA do Azure  está disponível por meio do portal Azure, APIs REST e SDKs do Azure. Ele também sustenta o IQ do Foundry, a camada de conhecimento gerenciado que transforma o conteúdo da empresa em bases de conhecimento reutilizáveis e com reconhecimento de permissão para agentes no portal do Microsoft Foundry.

No Pesquisa de IA do Azure , 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 Pesquisa de IA do Azure . 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 Pesquisa de IA do Azure  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 para as funções geo.distance ou search.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