filter子句

子句说明

过滤子句支持用户根据过滤条件,筛选出用户感兴趣的文档。过滤子句在通过query子句查找到的文档进行进一步的过滤,以返回最终所需结果。过滤子句不是一个必选子句。

子句语法

{
  "filter": ""
}

filter子句是一个可选子句,它的内容是各种过滤条件组织成的逻辑表达式的字符串,例如a > 10 AND b < 100。详细内容请参考表达式语法

表达式语法

简单过滤

左值 关系运算符 右值

左值:可以是一个属性字段或者是一个常量值(可以是数值或者string)

关系运算符:目前支持的逻辑运算有>、<、=、<=、>=、!=

右值:可以是一个属性字段或者是一个常量值(可以是数值或者string)

示例:

price > 100, 表示筛选出价格大于100的文档
ids=1,ids为一个多值字段,表示筛选出ids中包含1的文档
province != "浙江",表示筛选出province不为浙江的文档

多个过滤条件组合

条件 逻辑运算符 条件

条件:是一个完整的关系运算表达式,比如 price > 100

逻辑运算符:AND、OR。AND表示两边条件都必须为TRUE,OR表示有一个为TRUE即可。也可以在子句中使用(),括号的优先级最高。

示例:

price > 100 AND categoryId=10,表示筛选出categoryId为10,且价格大于100的文档
categoryId = 100 OR categoryId=10,表示筛选出categoryId为100或者10的文档
(categoryId = 100 OR categoryId=10) AND price > 100,表示筛选出categoryId为100或者10且价格大于100的文档

过滤时使用算术运算

filter=左值 算术运算符 右值 关系运算符 条件值

左值:可以是一个属性字段或者是一个常量值(可以是数值或者string)

算术运算符:目前支持的逻辑运算有+、-、*、/

右值:可以是一个属性字段或者是一个常量值(可以是数值或者string)

条件值:可以是一个属性字段或者是一个常量值

示例:

price*0.5 > 100,表示筛选出price打5折之后大于100的文档
price-cost > 100,表示筛选出price减去cost大于100的文档
(price*0.5 > 100) AND categoryId=10,表示筛选出price打5折之后大于100且categoryId为10的文档

过滤时使用function函数

function 关系运算符 右值

function为内置的function函数,比如in/notin等,更多的内置函数可以参考内置function函数。如果function函数的返回值是bool型,那么filter中可以不需要关系运算符。另外关系运算符的右边也可以是一个function函数。

示例:

in(id,"1|2|3"),表示筛选出id为1或者2或者3的文档

注意事项

  • 在filter中出现的字段必须在定义应用结构的时候配置为属性字段;

  • float、double类型因为精度问题无法做精确相等的判断,如有这种场景请改用>和<来实现。

  • string类型的字段值,在filter子句中必须要加双引号,支持所有的关系运算,不支持算术运算。

  • string类型字段的过滤仅支持=、!=运算,含义为等于、不等于,不支持>、<等关系运算。

  • 多值字段使用=、!=时,其语义是多值字段只要包括filter的值即可。

  • 表达式中的双引号需要转义。