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