通用子句
部分子句的执行顺序
召回过程:alias->filter->localcount
总流程:召回->orderby->distinct->fields
alias
功能:指定虚拟字段。
如果是原始字段被直接定义为虚拟字段,那么其他模块(filter, sorter,orderby,distinct等)只能通过虚拟字段即别名来访问该字段。
支持将表达式定义为虚拟字段。
支持用已经定义的虚拟字段来定义新的虚拟字段,但禁止存在递归定义。
格式:
alias=field_name1:new_name1;<expression>:new_name2;...
例如:
alias=username:nick
,alias=to_double(price)+sqrt(auction)*20+cos(300):field_alias;field_alias+100:field_alias_2
。
distinct
功能:限制返回结果中同值字段的数目
适用于
merge
、join
、atomic
语句格式:
distinct=<expr1>[;<expr2>;<expr3>][|<count>][|$]
distinct
不支持多值类型distinct
不支持逻辑表达式(如distinct=field1>0|2
),但是支持算式(如distinct=field1+10|2
)不加
|count
语句,默认返回数量为1
例如我们需要限制字段名为"field1"相同值个数最多为2,可以表达为:
distinct=field1|2
增加’|$'标记,表示distinct时不对数据进行删除,而是append到结果最后(不保证顺序)
如数据集S={1,1,1,2,2,2,3,3,4,5,5,5},对S进行
distinct=S|2
,其结果为d(S)={1,1,2,2,3,3,4,5,5}如数据集S={1,1,1,2,2,2,3,3,4,5,5,5},对S进行
distinct=S|2|$
,其结果为d(S)={1,1,2,2,3,3,4,5,5,1,2,5}在指定截断时必须指明count数,否则语法错误
fields
功能:指定需要返回的原始字段或者虚拟字段
如果没有指定,默认返回所有的原始字段和虚拟字段。
格式:
fields=field_name1;field_name2;...
filter
功能:指定过滤条件
支持将表达式定义为过滤条件
格式:
filter=<expression1>
例如
filter=f1>100
,filter=f1*f2<50
,filter=f1=f2
,filter=f1!=f2 AND f1>10
,filter=sqrt(f1)>2
,注意事项
字符串在filter中使用需要加双引号,如
filter=type="吊牌"
。字符串只支持判等,不支持
<
和>
。filter在对两个字段进行比较的时候要求字段类型一致。
多值字段的比较,在
=
的情况下为or逻辑,其他情况下(>
、<
)为and逻辑即一个多值字段中全部值不等于条件才判真,有一个等于条件满足即判真
不支持多值字段与多值字段比较
表达式的操作符存在优先级,从高到低依次为:
>
--=
--@
--AND
表达式的操作符支持结合律,同c语言的保持一致。推荐加上小括号
()
来保证操作符的执行顺序。例如,filter=(relation_type=1) AND (property@1024)>0
localcount
功能:指定单个pkey需要返回的结果数量。
如果没有指定,那么只保证结果的总数量符合range子句规定,而不关心单个pkey的召回数量。
如果指定,每个pkey最多召回count个结果。
格式:
localcount=<count>
count
是非负整数,例如localcount=2
。
orderby
功能:指定采用内置默认排序模块,以及排序维度。
orderby不支持多值类型
默认为倒序
格式:
orderby=<expression1>;field_name;<expression2>;...
+为正序(由小到大),-为倒序
例如
orderby=+f1;-f2/100
range
功能:指定具体返回的结果范围
不指定
range
子句,默认返回10条range
在满足其他子句逻辑后在执行range
是在对应结果集范围内控制,非某个key范围格式:
range=<start_offset>:<count>
start_offset
为非负整数,意思是起始的查询行数,例如range=0:10
sorter
功能:指定采用用户定制的排序模块进行排序。
sorter 和 orderby 参数如果同时使用,只有 sorter 生效**。
ABFS 提供内置随机打散插件 __igraph_random_buildin_sorter__(前后均是两个下划线)。
__igraph_random_buildin_sorter__
功能:对原始文档进行随机打散。
格式:sorter=__igraph_random_buildin_sorter__<:seed=xxx>
参数
seed
指定随机种子,用于调试。不指定参数
seed
,默认基于当前时间做随机种子。示例
// 随机打散召回的文档
search{table=userinfo&keys=2;10;5;14&sorter=__abfs_random_buildin_sorter__
// 结合distinct子句,随机打散文档( pp 为 primary key 字段)。
search{table=userinfo&keys=2;10;5;14&sorter=__igraph_random_buildin_sorter__&distinct=pp|2
// 指定随机种子。
search{table=userinfo&keys=2;10;5;14&sorter=__igraph_random_buildin_sorter__:seed=1111&distinct=pp|2
tag
功能:指定左右查询结果来源。
适用于
merge
语句使用 tag 子句后,系统会在结果集中附加一个用于区分结果来源的默认字段abfs
_buildin_tag_field
。该字段具体取值需要用户指定。不同取值标记了该 MatchRecord 的来源。使用嵌套 merge 语句时,可以多重使用 tag 子句。
格式:
tag=<left_tagid>:<right_tagid>
tagid
范围:1-15 的整数。以
tag=1:2
为例,左结果集中的abfs_buildin_tag_field
将会被写入1,右结果集中为2。
// tag=3:4 中的 3 不会覆盖子 merge 语句中的 tag=1:2
// 最终返回的结果中`abfs_buildin_tag_field`字段取值为 1、2、4
search{table=ig_ref_userbkt&keys=2:33}
merge{tag=1:2}search{table=userinfo&keys=2:1}
merge{orderby=-price|tag=3:4}search{table=userinfo&keys=1}