子句说明
过滤子句支持用户根据过滤条件,筛选出用户感兴趣的文档。过滤子句在通过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的值即可。
表达式中的双引号需要转义。