将两个或多个字符串连接成一个。非字符串参数必须使用 TO_STRING() 函数显式转换为字符串。
CONCAT(TO_STRING(float_attr), ',', TO_STRING(int_attr), ',', title)
LEVENSHTEIN ( pattern, source, {normalize=0, length_delta=0}) 返回单字符编辑(插入、删除或替换)次数的数字(Levenshtein 距离),表示将 pattern 变为 source 所需的编辑次数。
pattern,source - 常量字符串、字符串字段名、JSON 字段名,或任何产生字符串的表达式(例如,SUBSTRING_INDEX())
normalize - 选项,返回一个范围在 [0.0 - 1.0] 之间的浮点数距离,其中 0.0 表示完全匹配,1.0 表示最大差异。默认值为 0,表示不归一化,结果为整数。
length_delta - 如果设置了该选项且字符串长度差异超过 length_delta,则跳过 Levenshtein 距离计算,直接返回 max(strlen(pattern), strlen(source))。默认值为 0,表示对任何输入字符串都计算 Levenshtein 距离。该选项在检查大致相似字符串时非常有用。
SELECT LEVENSHTEIN('gily', attr1) AS dist, WEIGHT() AS w FROM test WHERE MATCH('test') ORDER BY w DESC, dist ASC;
SELECT LEVENSHTEIN('gily', j.name, {length_delta=6}) AS dist, WEIGHT() AS w FROM test WHERE MATCH('test') ORDER BY w DESC;
SELECT LEVENSHTEIN(title, j.name, {normalize=1}) AS dist, WEIGHT() AS w FROM test WHERE MATCH ('test') ORDER BY w DESC, dist ASC;
REGEX(attr,expr) 函数如果正则表达式匹配属性字符串,则返回 1,否则返回 0。它适用于字符串和 JSON 属性。
SELECT REGEX(content, 'box?') FROM test;
SELECT REGEX(j.color, 'red | pink') FROM test;
表达式应遵循 RE2 语法。例如,要执行不区分大小写的搜索,可以使用:
SELECT REGEX(content, '(?i)box') FROM test;
SNIPPET() 函数可用于突出显示给定文本中的搜索结果。前两个参数是:要高亮的文本和查询。可以将选项作为第三个、第四个及后续参数传递给函数。SNIPPET() 可以直接从表中获取要高亮的文本。在这种情况下,第一个参数应为字段名:
SELECT SNIPPET(body, QUERY()) FROM myIndex WHERE MATCH('my.query')
在此示例中,QUERY() 表达式返回当前全文查询。SNIPPET() 也可以高亮非索引文本:
mysql SELECT id, SNIPPET('text to highlight', 'my.query', 'limit=100') FROM myIndex WHERE MATCH('my.query')
此外,它还可以用于高亮通过用户自定义函数(UDF)从其他来源获取的文本:
SELECT id, SNIPPET(myUdf(id), 'my.query', 'limit=100') FROM myIndex WHERE MATCH('my.query')
在此上下文中,myUdf() 是一个用户自定义函数(UDF),用于从外部存储源通过 ID 获取文档。SNIPPET() 函数被视为“后限制”函数,这意味着片段的计算会延迟到整个最终结果集准备好之后,甚至在应用 LIMIT 子句之后。例如,如果使用 LIMIT 20,10 子句,SNIPPET() 最多会被调用 10 次。
需要注意的是,SNIPPET() 不支持基于字段的限制。若需此功能,请使用 HIGHLIGHT()。
SUBSTRING_INDEX(string, delimiter, number) 根据指定的分隔符出现次数返回原字符串的子串:
- string - 原始字符串,可以是常量字符串或字符串/JSON 属性中的字符串。
- delimiter - 要搜索的分隔符。
- number - 搜索分隔符的次数。可以是正数或负数。若为正数,函数返回分隔符左侧的所有内容;若为负数,函数返回分隔符右侧的所有内容。
SUBSTRING_INDEX() 默认返回字符串,但如果需要,也可以强制转换为其他类型(如整数或浮点数)。数值可以通过特定函数(如 BIGINT()、DOUBLE() 等)转换。
SELECT SUBSTRING_INDEX('www.w3schools.com', '.', 2) FROM test;
SELECT SUBSTRING_INDEX(j.coord, ' ', 1) FROM test;
SELECT SUBSTRING_INDEX('1.2 3.4', ' ', 1); /* '1.2' */
SELECT SUBSTRING_INDEX('1.2 3.4', ' ', -1); /* '3.4' */
SELECT sint ( SUBSTRING_INDEX('1.2 3.4', ' ', 1)); /* 1 */
SELECT sint ( SUBSTRING_INDEX('1.2 3.4', ' ', -1)); /* 3 */
SELECT double ( SUBSTRING_INDEX('1.2 3.4', ' ', 1)); /* 1.200000 */
SELECT double ( SUBSTRING_INDEX('1.2 3.4', ' ', -1)); /* 3.400000 */
UPPER(string) 将参数转换为大写,LOWER(string) 将参数转换为小写。
结果也可以提升为数值,但仅当字符串参数可转换为数字时。数值可以通过任意函数(BITINT、DOUBLE 等)提升。
SELECT upper('www.w3schools.com', '.', 2); /* WWW.W3SCHOOLS.COM */
SELECT double (upper ('1.2e3')); /* 1200.000000 */
SELECT integer (lower ('12345')); /* 12345 */