milvus/docs/design_docs/query_boolean_expr.md
FluorineDog 9bdf5acf61
Add query_boolean_expr docs (#5692)
Signed-off-by: fluorinedog <fluorinedog@gmail.com>
2021-06-10 07:43:49 +08:00

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 := 列名

注意,

  1. NIL 态为空字符串, 代表无 Predicate 的情形
  2. ”+,” 代表逗号分隔的,且至少有一个元素的重复元素

语法分析后,执行以下静态检查规则

  1. 列名必须存在于 Schema 中,且不是向量类型
  2. CompareExpr/TermExpr 要求左右类型匹配
  3. 整型列必须对应整型数据
    1. 浮点列可以对应浮点数据或整型数据
    2. BinaryOp 中,“与操作符” 的优先级高于 “或操作符“

简单举例说明:

A > 3 && A < 4 && (C > 5 || D < 6)
FloatCol in [1.0, 2, 3.0]
Int64Col in [1, 2, 3] or C != 6