內置UDF列表
復雜類型函數
函數名 | 功能簡介 | 版本 |
判斷字段值在給定集合內 | ALL | |
判斷字段值不在給定集合內 | ALL | |
使用給定的條件查詢指定字段的倒排索引 | ALL | |
使用給定的條件查詢倒排索引, 原HA3 query語法 | ALL | |
計算經緯度距離 | >=3.7.5 | |
>=3.9.0 | ||
>=3.9.0 |
使用示例
檢索示例
檢索全表內容
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(int32 a, const string b)
boolean contain(int64 a, const string b)
boolean contain(string a, const string b)
boolean contain(ARRAY<int32> a, const string b)
boolean contain(ARRAY<int64> a, const string b)
boolean contain(ARRAY<string> a, const string b)
說明
判斷單值或多值a中是否包含b中描述的內容
參數
參數a:輸入為單值多值的int32/int64/string 類型
參數b:輸入為常量string表達式,用 |
分隔,表示滿足任意一項即可
返回值
boolean類型返回,表示參數a是否包含參數b中描述的集合
示例
使用 contain
,檢索nid字段值在[1,2,3]的所有記錄
SELECT nid, price, brand, size FROM phone WHERE contain(nid, '1|2|3') ORDER BY nid LIMIT 100
USE_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(int32 a, const string b)
boolean notcontain(int64 a, const string b)
boolean notcontain(string a, const string b)
boolean notcontain(ARRAY<int32> a, const string b)
boolean notcontain(ARRAY<int64> a, const string b)
boolean notcontain(ARRAY<string> a, const string b)
說明
判斷單值或多值a中是否不在b中描述的內容
參數
參數a:輸入為單值多值的int32/int64/string 類型
參數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 100
USE_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
原型
說明
判斷字段a中是否包含b中描述的內容,單字段索引的召回
僅限索引表召回階段倒排加速優化使用,用于where條件中
參數
參數a:輸入為常量string 類型,對應建立倒排優化字段
參數b:輸入為常量string 類型,內容為字符串描述內容,
參數b可作為一個string整體查詢,可用于空間向量索引
參數c:可選項,可描述內容包含分詞器,停用詞等,用于b中內容的分詞:
主要通過下以關鍵詞設置,詳情見附錄:
使用:
,
分隔每一項
global_analyzer
specific_index_analyzer
no_token_indexes
tokenize_query
remove_stopwords
default_op
返回值
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)
boolean QUERY(const string a, const string b, const string c)
說明
判斷字段a中是否包含b中描述的內容,提供自動分詞并檢索能力,
用于支持在SQL模式下使用HA3引擎原生的查詢語法ha3_query子句,
僅限索引表召回階段倒排加速優化使用,用于where條件中
參數
參數a:輸入為常量string 類型,會作為默認索引字段,default_index
參數b:輸入為常量string 類型,內容為字符串描述內容
會拼到query解析中,可用于range索引
參數c:可選項,可描述內容包含分詞器,停用詞等,用于b中內容的分詞:
使用:,
分隔每一項
主要通過以下關鍵詞設置:
global_analyzer
specific_index_analyzer
no_token_indexes
tokenize_query
remove_stopwords
default_op
返回值
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 |
指定default_op等用法,使用
:,
分隔
SELECT nid, price, brand, size FROM phone
WHERE QUERY('title', 'Huawei手機 OPPO手機', 'default_op:OR,remove_stopwords:true')
備注
QUERY udf的參數2是通過HA3 query語法解析器解析的,HA3 query語法可以參考 [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手機''')。
典型錯誤
錯誤類型 | 錯誤形式 | 正確形式 |
語法報錯,查詢無結果 | QUERY('pidvid','123:456') | QUERY('pidvid','"123:456"') |
sphere_distance
原型
double sphere_distance(LOCATION point, double longitude, double latitude)
說明
計算輸入的經緯度和檢索文檔的距離
參數
參數point:LOCATION類型單值的列
參數longitude:經度
參數latitude:緯度
返回值
地球球面距離
示例
使用sphere_distance
。geo必須是LOCATION類型單值字段且創建了正排
SELECT sphere_distance(geo,127.0,30.0) FROM phone
range
原型
boolean range(int8 v, const string rangeDesc)
boolean range(uint8 v, const string rangeDesc)
boolean range(int16 v, const string rangeDesc)
boolean range(uint16 v, const string rangeDesc)
boolean range(int32 v, const string rangeDesc)
boolean range(uint32 v, const string rangeDesc)
boolean range(int64 v, const string rangeDesc)
boolean range(uint64 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<=100 |
range(v, "(0, 100)") | 0<v<100 |
range(v, "[0, 100)") | 0<=v<100 |
range(v, "(0, 100]") | 0<v<=100 |
range(v, "(0,)") range(v, "(0,]") | 0<v |
range(v, "[0,)") range(v, "[0,]") | 0<=v |
range(v, "(,100)") range(v, "[,100)") | v<100 |
range(v, "(,100]") range(v, "[,100]") | v<=100 |
range(v, "(,)") range(v, "[,]") range(v, "[,)") range(v, "(,]") | true |
此外,rangeDesc還支持用"!"符號寫于行首,表示對意向區間取反
示例
使用range
SELECT nid FROM phone where range(price,"(127.0,30.0)")
SELECT nid FROM phone where range(price,"!(127.0,30.0)")
normalizescore
原型
double normalizescore(int8 v, const string defaultScore)
double normalizescore(uint8 v, const string defaultScore)
double normalizescore(int16 v, const string defaultScore)
double normalizescore(uint16 v, const string defaultScore)
double normalizescore(int32 v, const string defaultScore)
double normalizescore(uint32 v, const string defaultScore)
double normalizescore(int64 v, const string defaultScore)
double normalizescore(uint64 v, const string defaultScore)
double normalizescore(float v, const string defaultScore)
double normalizescore(double v, const string 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. |
附錄
分詞器描述:
用于MATCHINDEX,QUERY等使用的參數說明
查詢中指定全局的分詞器,該分詞器會覆蓋schema的分詞器,指定的值必須在analyzer.json里有配置
查詢中指定index使用另外的分詞器,該分詞器會覆蓋global_analyzer和schema的分詞器
支持查詢中指定的index不分詞(除分詞以外的其他流程如歸一化、去停用詞會正常執行),
多個index之間用;
分割
tokenize_query
true
or false
表示是否需要對query進行分詞,QUERY
UDF帶了分詞器該參數不生效
默認true
remove_stopwords
true
or false
表示是否需要刪除stop words,stop words在分詞器中配置
默認true
指定在該次查詢中使用的默認query 分詞后的連接操作符,AND
or OR
, 默認行為在biz 中配置
??
第三方UDF列表
復雜類型函數
函數名 | 功能簡介 | 版本 |
type cast | cast類型 | ALL |