Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Operadores lógicos OData no Pesquisa de IA do Azure –
Expressões de filtro OData no Pesquisa de IA do Azure são expressões boolianas avaliadas como true ou false. Você pode escrever um filtro complexo escrevendo uma série de filtros mais simples e compondo-os usando os operadores lógicos da álgebra booliana:
-
and: um operador binário que será avaliado comotruese as subexpressões esquerda e direita forem avaliadas comotrue. -
or: um operador binário que será avaliado comotruese uma das subexpressões esquerda ou direita for avaliada comotrue. -
not: um operador unário que será avaliado comotruese a subexpressão for avaliada comofalsee vice-versa.
Em conjunto com os operadores de coleção any e all, eles permitem que você construa filtros que podem expressar critérios de pesquisa muito complexos.
Sintaxe
A EBNF (forma estendida de Backus-Naur) a seguir define a gramática de uma expressão OData que usa operadores lógicos.
logical_expression ::=
boolean_expression ('and' | 'or') boolean_expression
| 'not' boolean_expression
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.
Há duas formas de expressões lógicas: binária (and/or), em que há duas subexpressões, e unária (not), em que há apenas uma. As subexpressões podem ser expressões boolianas de qualquer tipo:
- Campos ou variáveis de intervalo do tipo
Edm.Boolean - Funções que retornam valores do tipo
Edm.Boolean, comogeo.intersectsousearch.ismatch -
Expressões de comparação, como
rating gt 4 -
Expressões de coleção, como
Rooms/any(room: room/Type eq 'Deluxe Room') - Os literais boolianos
trueoufalse. - Outras expressões lógicas construídas usando
and,orenot.
Importante
Há algumas situações em que nem todos os tipos de subexpressão podem ser usados com and/or, especialmente dentro de expressões lambda. Consulte Operadores de coleção OData no Pesquisa de IA do Azure para obter detalhes.
Operadores lógicos e null
A maioria das expressões boolianas, como funções e comparações, não pode produzir valores null, e os operadores lógicos não podem ser aplicados diretamente ao literal null (por exemplo, x and null não é permitido). No entanto, os campos boolianos podem ser null. Sendo assim, você precisa estar ciente de como os operadores and, or e not se comportam na presença de null. Isso é resumido na seguinte tabela, em que b é um campo do tipo Edm.Boolean:
| Expressão | Resultado quando b é null |
|---|---|
b |
false |
not b |
true |
b eq true |
false |
b eq false |
false |
b eq null |
true |
b ne true |
true |
b ne false |
true |
b ne null |
false |
b and true |
false |
b and false |
false |
b or true |
true |
b or false |
false |
Quando um campo booleano b aparece sozinho em uma expressão de filtro, ele se comporta como se tivesse sido escrito b eq true. Portanto, se b for null, a expressão é avaliada como false. Da mesmo modo, not b comporta-se como not (b eq true). Portanto, ele é avaliado como true. Dessa forma, os campos null se comportam da mesma maneira que false. Isso é consistente com o modo como eles se comportam quando combinados com outras expressões usando and e or, conforme mostrado na tabela acima. Apesar disso, uma comparação direta com false (b eq false) ainda será avaliada como false. Em outras palavras, null não é igual a false, embora ambos se comportem da mesma maneira em expressões boolianas.
Exemplos
Corresponder documentos em que o campo rating está entre 3 e 5, inclusive:
rating ge 3 and rating le 5
Corresponder documentos em que todos os elementos do campo ratings são menores que três ou maiores que cinco:
ratings/all(r: r lt 3 or r gt 5)
Corresponder documentos em que o campo location está dentro do polígono fornecido, e o documento não contém o termo "público".
geo.intersects(location, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))') and not search.ismatch('public')
Corresponder documentos para hotéis em Vancouver, Canadá, em que há um quarto de luxo com uma taxa base inferior a 160:
Address/City eq 'Vancouver' and Address/Country eq 'Canada' and Rooms/any(room: room/Type eq 'Deluxe Room' and room/BaseRate lt 160)