Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Operadores de colección de OData en Búsqueda de Azure AI:
Nota:
Búsqueda de Azure AI está disponible a través del portal de Azure, las API REST y los SDK de Azure. También respalda Foundry IQ, la capa de conocimiento administrada que transforma el contenido empresarial en bases de conocimiento reutilizables y compatibles con permisos para agentes en el portal de Microsoft Foundry.
Al escribir una expresión de filtro de OData para usarla con Búsqueda de Azure AI, a menudo es útil filtrar por campos de colección. Esto se puede conseguir con los operadores any y all.
Sintaxis
En la siguiente EBNF (forma de Backus-Naur extendida) se define la gramática de una expresión de OData en la que se usa any o all.
collection_filter_expression ::=
field_path'/all(' lambda_expression ')'
| field_path'/any(' lambda_expression ')'
| field_path'/any()'
lambda_expression ::= identifier ':' boolean_expression
También está disponible un diagrama de sintaxis interactivo:
Nota:
Consulte Referencia de la sintaxis de expresiones de OData para Búsqueda de Azure AI para obtener la EBNF completa.
Hay tres formas de expresión que filtran las colecciones.
- Las dos primeras recorren en iteración un campo de colección y aplican un predicado con forma de expresión lambda a cada elemento de la colección.
- Una expresión que use
alldevuelvetruesi el predicado es true para todos los elementos de la colección. - Una expresión que use
anydevuelvetruesi el predicado es true al menos para un elemento de la colección.
- Una expresión que use
- En la tercera forma de filtro de colección se usa
anysin una expresión lambda para comprobar si un campo de la colección está vacío. Si la colección tiene algún elemento, devuelvetrue. Si la colección está vacía, devuelvefalse.
Una expresión lambda en un filtro de colección es como el cuerpo de un bucle en un lenguaje de programación. Define una variable, denominada variable de rango, que contiene el elemento actual de la colección durante la iteración. También define otra expresión booleana que son los criterios de filtro que se van a aplicar a la variable de rango para cada elemento de la colección.
Ejemplos
Comparar documentos cuyo campo tags contenga exactamente la cadena "wifi":
tags/any(t: t eq 'wifi')
Comparar documentos donde todos los elementos del campo ratings estén comprendidos entre 3 y 5, inclusive:
ratings/all(r: r ge 3 and r le 5)
Comparar documentos donde cualquiera de las geocoordenadas del campo locations esté dentro del polígono indicado:
locations/any(loc: geo.intersects(loc, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))
Comparar documentos donde el campo rooms está vacío:
not rooms/any()
Comparar documentos donde (para todas las habitaciones) el campo rooms/amenities contiene "tv" y rooms/baseRate es inferior a 100:
rooms/all(room: room/amenities/any(a: a eq 'tv') and room/baseRate lt 100.0)
Limitaciones
No todas las características de las expresiones de filtro están disponibles dentro del cuerpo de una expresión lambda. Las limitaciones varían según el tipo de datos del campo de colección que se quiere filtrar. En la tabla siguiente se resumen las limitaciones.
| Tipo de datos | Características que se permiten en expresiones lambda con any |
Características que se permiten en expresiones lambda con all |
|---|---|---|
Collection(Edm.ComplexType) |
Todo excepto search.ismatch y search.ismatchscoring |
Iguales |
Collection(Edm.String) |
Comparaciones con eq o search.in Combinación de las subexpresiones con or |
Comparaciones con ne o not search.in() Combinación de las subexpresiones con and |
Collection(Edm.Boolean) |
Comparaciones con eq o ne |
Iguales |
Collection(Edm.GeographyPoint) |
Uso de geo.distance con lt o le geo.intersects Combinación de las subexpresiones con or |
Uso de geo.distance con gt o ge not geo.intersects(...) Combinación de las subexpresiones con and |
Collection(Edm.DateTimeOffset), Collection(Edm.Double), , Collection(Edm.Int32), Collection(Edm.Int64) |
Comparaciones mediante eq, ne, lt, gt, le o ge Combinación de las comparaciones con otras subexpresiones mediante or Combinación de las comparaciones, excepto ne con otras subexpresiones mediante and Expresiones que utilizan combinaciones de and y or en el formulario normal disyuntivo (DNF) |
Comparaciones mediante eq, ne, lt, gt, le o ge Combinación de las comparaciones con otras subexpresiones mediante and Combinación de las comparaciones, excepto eq con otras subexpresiones mediante or Expresiones que utilizan combinaciones de and y or en el formulario normal conjuntivo (CNF) |
Para obtener más detalles sobre estas limitaciones, así como ejemplos, vea Solución de problemas de los filtros de colección en Búsqueda de Azure AI. Para obtener información más detallada sobre por qué existen estas limitaciones, vea Descripción de los filtros de colección en Búsqueda de Azure AI.