mirror of
https://gitee.com/milvus-io/milvus.git
synced 2024-12-04 04:49:08 +08:00
9bdf5acf61
Signed-off-by: fluorinedog <fluorinedog@gmail.com>
1.2 KiB
1.2 KiB
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 := 列名
注意,
- NIL 态为空字符串, 代表无 Predicate 的情形
- ”+,” 代表逗号分隔的,且至少有一个元素的重复元素
语法分析后,执行以下静态检查规则
- 列名必须存在于 Schema 中,且不是向量类型
- CompareExpr/TermExpr 要求左右类型匹配
- 整型列必须对应整型数据
- 浮点列可以对应浮点数据或整型数据
- BinaryOp 中,“与操作符” 的优先级高于 “或操作符“
简单举例说明:
A > 3 && A < 4 && (C > 5 || D < 6)
FloatCol in [1.0, 2, 3.0]
Int64Col in [1, 2, 3] or C != 6