milvus/docs/design_docs/query_boolean_expr.md

69 lines
1.2 KiB
Markdown
Raw Normal View History

```haskell
Expr :=
LogicalExpr | NIL
LogicalExpr :=
LogicalExpr BinaryLogicalOp LogicalExpr
| UnaryLogicalOp LogicalExpr
| "(" LogicalExpr ")"
| SingleExpr
BinaryLogicalOp :=
"&&" | "and"
| "||" | "or"
UnaryLogicalOp :=
"not"
SingleExpr :=
TermExpr
| CompareExpr
TermExpr :=
IDENTIFIER "in" ConstantArray
ConstantArray :=
"[" Constant+, "]"
Constant :=
INTERGER
| FLOAT_NUMBER
CompareExpr :=
IDENTIFIER CmpOp Constant
| Constant CmpOp IDENTIFIER
CmpOp :=
">"
| ">="
| "<"
| "<="
| "=="
| "!="
INTERGER := 整数
FLOAT_NUM := 浮点数
IDENTIFIER := 列名
```
注意,
1. NIL 态为空字符串, 代表无 Predicate 的情形
2. ”+,” 代表逗号分隔的,且至少有一个元素的重复元素
语法分析后,执行以下静态检查规则
1. 列名必须存在于 Schema 中,且不是向量类型
2. CompareExpr/TermExpr 要求左右类型匹配
3. 整型列必须对应整型数据
1. 浮点列可以对应浮点数据或整型数据
2. BinaryOp 中,“与操作符” 的优先级高于 “或操作符“
简单举例说明:
```python
A > 3 && A < 4 && (C > 5 || D < 6)
FloatCol in [1.0, 2, 3.0]
Int64Col in [1, 2, 3] or C != 6
```