Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Opérateurs de collection OData dans Recherche Azure AI -
Remarque
Recherche Azure AI est disponible via le portail Azure, les API REST et les SDK Azure. Il sous-tend également Foundry IQ, la couche de connaissances managée qui transforme le contenu d’entreprise en bases de connaissances réutilisables et prenant en charge les autorisations pour les agents dans le portail Microsoft Foundry.
Quand vous écrivez une expression de filtre OData à utiliser avec la Recherche Azure AI, il est souvent utile de filtrer sur les champs de la collection. Vous pouvez y parvenir à l’aide des opérateurs any et all.
Syntaxe
L’extension EBNF suivante (Extended Backus-Naur Form) définit la grammaire d’une expression OData utilisant any ou all.
collection_filter_expression ::=
field_path'/all(' lambda_expression ')'
| field_path'/any(' lambda_expression ')'
| field_path'/any()'
lambda_expression ::= identifier ':' boolean_expression
Un diagramme de syntaxe interactif est également disponible :
Remarque
Consultez Informations de référence sur la syntaxe d’expression OData pour Recherche Azure AI pour l’extension EBNF complète.
Il existe trois formes d’expression qui filtrent les collections.
- Les deux premiers itèrent sur un champ de collection, en appliquant un prédicat donné sous la forme d’une expression lambda à chaque élément de la collection.
- Une expression qui utilise
allrenvoietruesi le prédicat a la valeur true pour chaque élément de la collection. - Une expression qui utilise
anyrenvoietruesi le prédicat a la valeur true pour au moins un élément de la collection.
- Une expression qui utilise
- La troisième forme de filtre de collection utilise
anysans expression lambda pour tester si un champ de la collection est vide. Si la collection comporte des éléments, elle renvoietrue. Si la collection est vide, elle renvoiefalse.
Un expression lambda d’un filtre de collection est comme le corps d’une boucle dans un langage de programmation. Elle définit une variable, appelée variable de portée, qui contient l’élément actuel de la collection pendant l’itération. Elle définit également une autre expression booléenne qui est le critère de filtre à appliquer à la variable de portée pour chaque élément de la collection.
Exemples
Correspondance des documents dont le champ tags contient exactement la chaîne « wifi » :
tags/any(t: t eq 'wifi')
Faire correspondre les documents où chaque élément du champ ratings se trouve entre 3 et 5, inclusivement.
ratings/all(r: r ge 3 and r le 5)
Faire correspondre les documents où l'une des coordonnées géographiques du champ locations se trouve dans le polygone donné :
locations/any(loc: geo.intersects(loc, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))
Recherche des documents où le champ rooms est vide :
not rooms/any()
Faites correspondre les documents où (pour toutes les salles) le champ rooms/amenities contient « tv » et rooms/baseRate est inférieur à 100 :
rooms/all(room: room/amenities/any(a: a eq 'tv') and room/baseRate lt 100.0)
Limites
Toutes les fonctionnalités d’expressions de filtre ne sont pas disponibles dans le corps d’une expression lambda. Les restrictions diffèrent selon le type de données du champ de la collection que vous souhaitez filtrer. Le tableau suivant récapitule les restrictions :
| Type de données | Fonctionnalités autorisées dans les expressions lambda avec any |
Fonctionnalités autorisées dans les expressions lambda avec all |
|---|---|---|
Collection(Edm.ComplexType) |
Tout sauf search.ismatch et search.ismatchscoring |
Identique |
Collection(Edm.String) |
Comparaisons avec eq ou search.in Combinaison de sous-expressions avec or |
Comparaisons avec ne ou not search.in() Combinaison de sous-expressions avec and |
Collection(Edm.Boolean) |
Comparaisons avec eq ou ne |
Identique |
Collection(Edm.GeographyPoint) |
Utilisation de geo.distance avec lt ou le geo.intersects Combinaison de sous-expressions avec or |
Utilisation de geo.distance avec gt ou ge not geo.intersects(...) Combinaison de sous-expressions avec and |
Collection(Edm.DateTimeOffset), Collection(Edm.Double), Collection(Edm.Int32), Collection(Edm.Int64) |
Comparaisons avec eq, ne, lt, gt, le ou ge Combinaison de comparaisons avec d’autres sous-expressions à l’aide de or Combinaison de comparaisons, sauf ne, avec d’autres sous-expressions à l’aide de and Expressions utilisant des combinaisons de and et or en forme normale disjonctive (FND) |
Comparaisons avec eq, ne, lt, gt, le ou ge Combinaison de comparaisons avec d’autres sous-expressions à l’aide de and Combinaison de comparaisons, sauf eq, avec d’autres sous-expressions à l’aide de or Expressions utilisant des combinaisons de and et or en forme normale conjonctive (FNC) |
Pour plus d’informations sur ces limitations et pour obtenir des exemples, consultez Résolution des problèmes de filtres de collection dans la Recherche Azure AI. Pour plus d’informations sur la raison de ces limitations, consultez Présentation des filtres de collection dans la Recherche Azure AI.