Sintaxis de $orderby de OData en Azure AI Search

En Azure AI Search, el parámetro $orderby especifica el criterio de ordenación personalizado para los resultados de la búsqueda. En este artículo se describe la sintaxis de OData de $orderby y se proporcionan ejemplos.

La construcción y las constantes de las rutas de acceso de campo se describen en Introducción al lenguaje OData en Azure AI Search. Para más información sobre los comportamientos de ordenación, consulte Ordenación de los resultados.

Sintaxis

El parámetro $orderby acepta una lista separada por comas de hasta 32 cláusulas order-by. La sintaxis de una cláusula order-by se describe mediante la siguiente EBNF (forma de Backus-Naur extendida):

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

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

También está disponible un diagrama de sintaxis interactivo:

Nota:

Consulta Referencia de sintaxis de expresiones OData para Azure AI Search para obtener la EBNF completa.

Cada cláusula tiene criterios de ordenación, seguidos opcionalmente por una dirección de ordenación (asc para ascendente o desc para descendente). Si no se especifica una dirección, el valor predeterminado es ascendente. Si hay valores NULL en el campo, los valores NULL aparecen en primer lugar si la ordenación es asc y Last si la ordenación es desc.

Los criterios de ordenación pueden ser la ruta de acceso de un campo sortable o una llamada a las funciones geo.distance o search.score.

Para los campos de cadena, se usará el criterio de ordenación ASCII y el criterio de ordenación Unicode predeterminados. De forma predeterminada, la ordenación distingue mayúsculas de minúsculas, pero puede usar un normalizador para preprocesar el texto antes de la ordenación para cambiar este comportamiento. También puede usar un normalizador asciifolding para convertir caracteres no ASCII en su equivalente ASCII, si existe alguno.

Si varios documentos tienen los mismos criterios de ordenación y no se usa la función search.score (por ejemplo, si se ordena por el campo numérico Rating y tres documentos tienen una valoración de 4), los empates se resolverán por la puntuación del documento en orden descendente. Cuando las puntuaciones de documento sean las mismas (por ejemplo, cuando no se especifica ninguna consulta de búsqueda de texto completo en la solicitud), entonces el orden relativo de los documentos empatados es indeterminado.

Puede especificar varios criterios de ordenación. El orden de las expresiones determina el criterio de ordenación final. Por ejemplo, para clasificar en orden descendente por puntuación, seguido de la valoración, la sintaxis sería $orderby=search.score() desc,Rating desc.

La sintaxis de geo.distance en $orderby es la misma que la de $filter. Cuando se usa geo.distance en $orderby, el campo al que se aplica debe ser de tipo Edm.GeographyPoint y también debe ser sortable.

La sintaxis de search.score en $orderby es search.score(). La función search.score no toma ningún parámetro.

Ejemplos

Clasificar hoteles en orden ascendente por la tarifa base:

    $orderby=BaseRate asc

Clasificar hoteles en orden descendente por valoración y después en orden ascendente por tarifa base (recuerde que el orden ascendente es la opción predeterminada):

    $orderby=Rating desc,BaseRate

Clasificar hoteles en orden descendente por valoración y después en orden ascendente por distancia desde las coordenadas dadas:

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

Clasificar hoteles en orden descendente por search.score y valoración, y después en orden ascendente por distancia desde las coordenadas dadas. Entre dos hoteles con valoraciones idénticas, el más cercano aparece primero en la lista:

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

Consulte también