UDF列表函数名功能简介contain判断字段值在给定集合内,支持单值和多值notcontain判断字段值不在给定集合内,支持单值和多值MATCHINDEX使用给定的条件查询指定字段的倒排索引QUERY使用给定的条件查询倒排索引, 原HA3 query语法hashcombine将多个int64的值合并成1个int64的值rangevalue按范围将字段值做映射range判断字段值在给定区间内normalizescore对字段值作规整检索示例检索全表内容SELECT nid, price, brand, size FROM phone ORDER BY nid LIMIT 1000 USE_TIME: 0.881, ROW_COUNT: 10
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
1 | 3599 | Huawei | 5.9 |
2 | 4388 | Huawei | 5.5 |
3 | 899 | Xiaomi | 5 |
4 | 2999 | OPPO | 5.5 |
5 | 1299 | Meizu | 5.5 |
6 | 169 | Nokia | 1.4 |
7 | 3599 | Apple | 4.7 |
8 | 5998 | Apple | 5.5 |
9 | 4298 | Apple | 4.7 |
10 | 5688 | Samsung | 5.6 |contain原型boolean contain(INT a, const string b)
boolean contain(LITERAL a, const string b)
boolean contain(INT_ARRAY a, const string b)
boolean contain(LITERAL_ARRAY a, const string b)说明判断单值或多值a中是否包含b中描述的内容参数参数a:输入为INT/LITERAL /INT_ARRAY/LITERAL_ARRAY类型参数b:输入为常量string表达式,用 | 分隔,表示满足任意一项即可返回值boolean类型返回,表示参数a是否包含参数b中描述的集合示例SELECT nid, price, brand, size FROM phone WHERE contain(nid, '1|2|3') ORDER BY nid LIMIT 100USE_TIME: 0.059, ROW_COUNT: 3
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
1 | 3599 | Huawei | 5.9 |
2 | 4388 | Huawei | 5.5 |
3 | 899 | Xiaomi | 5 |notcontain原型boolean notcontain(INT a, const string b)
boolean notcontain(LITERAL a, const string b)
boolean notcontain(INT_ARRAY a, const string b)
boolean notcontain(LITERAL_ARRAY a, const string b)说明判断单值或多值a中是否不在b中描述的内容参数参数a:输入为INT/LITERAL /INT_ARRAY/LITERAL_ARRAY类型参数b:输入为常量string表达式,用 | 分隔,表示不能满足任意一项返回值boolean类型返回,表示参数a是否不在参数b中描述的集合示例使用 notcontain,检索nid字段值不在[1,2,3]范围内的所有记录SELECT nid, price, brand, size FROM phone WHERE notcontain(nid, '1|2|3') ORDER BY nid LIMIT 100USE_TIME: 0.092, ROW_COUNT: 7
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
4 | 2999 | OPPO | 5.5 |
5 | 1299 | Meizu | 5.5 |
6 | 169 | Nokia | 1.4 |
7 | 3599 | Apple | 4.7 |
8 | 5998 | Apple | 5.5 |
9 | 4298 | Apple | 4.7 |
10 | 5688 | Samsung | 5.6 |MATCHINDEX原型boolean MATCHINDEX(const string a, const string b)说明判断字段a中是否包含b中描述的内容,单字段索引的召回仅限索引表召回阶段倒排加速优化使用,用于where条件中参数参数a:输入为常量string 类型,对应建立倒排优化字段参数b:输入为常量string 类型,内容为字符串描述内容,参数b可作为一个string整体查询返回值boolean类型返回,表示字段a中是否含有参数b中描述的内容示例使用 MATCHINDEX,检索倒排字段 title中含有"镜头"关键字的记录SELECT nid, brand FROM phone WHERE MATCHINDEX('title', '镜头')------------------------------- TABLE INFO ---------------------------
nid | brand |
1 | Huawei |QUERY原型boolean QUERY(const string a, const string b)说明判断字段a中是否包含b中描述的内容,提供自动分词并检索能力,用于支持在SQL模式下使用HA3引擎原生的查询语法ha3 query语法,仅限索引表召回阶段倒排加速优化使用,用于where条件中参数参数a:输入为常量string 类型,会作为默认索引字段参数b:输入为常量string 类型,内容为字符串描述内容会拼到query解析中,可用于range索引返回值boolean类型返回,表示字段a中是否含有参数b中描述的内容示例使用 QUERY,查询 title中含有"Huawei手机"的条目。SELECT nid, price, brand, size FROM phone WHERE QUERY(title, 'Huawei手机')USE_TIME: 0.034, ROW_COUNT: 1
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
2 | 4388 | Huawei | 5.5 |使用组合条件,检索`title`中含有 "Huawei手机" 或者 "OPPO手机" 条目SELECT nid, price, brand, size FROM phone
WHERE QUERY(title, 'Huawei手机 OR OPPO手机')USE_TIME: 0.03, ROW_COUNT: 2
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
2 | 4388 | Huawei | 5.5 |
4 | 2999 | OPPO | 5.5 |备注:QUERY udf的参数2是通过HA3 query语法解析器解析的,HA3 query语法当参数2填入的是常量字符串,代入HA3 query需要注意将前后单引号去掉,如QUERY(title, 'Huawei手机 OPPO手机')等价于HA3查询query=Huawei手机 OPPO手机。如果需要在query描述内部加引号,如形为query='Huawei手机' AND 'OPPO手机' 的HA3查询串,QUERY udf中的等价形式为 QUERY(title, '''Huawei手机'' AND ''OPPO手机''')。SQL描述中常量字符串的使用注意事项,可参考 [使用限制] 的'常量字符串'部分。典型错误:错误类型错误形式正确形式语法报错,查询无结果QUERY('pidvid','123:456')QUERY('pidvid','"123:456"')rangevalue原型float rangevalue(float v, string desc)说明将连续值映射成离散值参数参数v:连续值的列参数desc:映射规则返回值映射后的离散值示例使用rangevalue,对price的值做映射:小于等于1000映射为1.0,大于1000小于等于5000映射为2.0,其他保留原始价格值SELECT rangevalue(price,'(,1000]:1.0;(1000,5000]:2.0') FROM phone;range原型boolean range(INT v, const string rangeDesc)
boolean range(FLOAT v, const string rangeDesc)
boolean range(DOUBLE v, const string rangeDesc)说明判断正排字段值是否在某一个区间参数参数v:字段,支持单值数值类型参数rangeDesc:常量,描述数值范围区间,支持开、闭与半开半闭区间返回值判断v是否在rangeDesc描述范围内,下表为支持的写法及返回值调用写法示例返回值range(v, "[0, 100]")0<=v<=100range(v, "(0, 100)")0<v<100range(v, "[0, 100)")0<=v<100range(v, "(0, 100]")0<v<=100range(v, "(0,)")range(v, "(0,]")0<vrange(v, "[0,)")range(v, "[0,]")0<=vrange(v, "(,100)")range(v, "[,100)")v<100range(v, "(,100]")range(v, "[,100]")v<=100range(v, "(,)")range(v, "[,]")range(v, "[,)")range(v, "(,]")true 注意:rangeDesc还支持用"!"符号写于行首,表示对意向区间取反示例使用rangeSELECT nid FROM phone where range(price,"(127.0,30.0)")
SELECT nid FROM phone where range(price,"!(127.0,30.0)")注意:range 是sql保留关键字 ,需要进行转义normalizescore原型double normalizescore(INT v, const double defaultScore)
double normalizescore(FLOAT v, const double defaultScore)
double normalizescore(DOUBLE v, const double defaultScore)说明对入参字段v作规整化处理,转换为double类型,已初始化返回原值,未初始化返回defaultScore参数参数v:字段,支持单值数值类型参数defaultScore:常量描述,必须为能转换为合法double类型的字符串返回值v若已初始化返回原值,未初始化返回defaultScore示例对于拥有字段price的3个doc,原始内容如下:
doc1: price=1.0
doc2: price= (未初始化)
doc3: price=2.0
执行
select normalizescore(price, "1000.0") as normalized_score from phone
USE_TIME: 32.141ms, ROW_COUNT: 2
------------------------------- TABLE INFO ---------------------------
normalized_score(double) |
1.0 |
1000.0 |
2.0. |