最后于 更新
NGRAM_SEARCH
描述
NGRAM_SEARCH 函数用于计算两个字符串的 N-gram 相似度。相似度范围为 0 到 1,值越大表示字符串越相似。
N-gram 是将字符串分解为连续 N 个字符的集合。相似度计算公式为:2 * |交集| / (|集合1| + |集合2|)
仅支持 ASCII 字符。
语法
NGRAM_SEARCH(<text>, <pattern>, <gram_num>)
参数
| 参数 | 说明 |
|---|---|
<text> | 需要比较的文本字符串。类型:VARCHAR |
<pattern> | 模式字符串(必须为常量)。类型:VARCHAR |
<gram_num> | N-gram 的 N 值,必须为正整数常量。类型:INT。 |
返回值
返回 DOUBLE 类型,为两个字符串的 N-gram 相似度(0 到 1 之间)。
特殊情况:
<text>或<pattern>为 NULL 时,返回 NULL;<gram_num>必须满足正整数常量约束,不能为 NULL- 如果字符串长度小于
<gram_num>,返回 0 <pattern>和<gram_num>必须为常量。Doris 4.1 系列自 4.1.5 起,对<gram_num>为 0、负数或非整数常量等非法输入显式报错- 相似度为 1 不一定表示字符串完全相同
示例
- 基本用法:计算相似度
SELECT ngram_search('123456789', '12345', 3);
+---------------------------------------+
| ngram_search('123456789', '12345', 3) |
+---------------------------------------+
| 0.6 |
+---------------------------------------+
- 高相似度示例
SELECT ngram_search('abababab', 'babababa', 2);
+-----------------------------------------+
| ngram_search('abababab', 'babababa', 2) |
+-----------------------------------------+
| 1 |
+-----------------------------------------+
- 字符串过短返回 0
SELECT ngram_search('ab', 'abc', 3);
+----------------------------------+
| ngram_search('ab', 'abc', 3) |
+----------------------------------+
| 0 |
+----------------------------------+
- NULL 值处理
SELECT ngram_search(NULL, 'test', 2);
+--------------------------------+
| ngram_search(NULL, 'test', 2) |
+--------------------------------+
| NULL |
+--------------------------------+
非法的 gram_num 会报错:
SELECT NGRAM_SEARCH('abc', 'abc', 0);
ngram_search(text,pattern,gram_num): gram_num must be a positive constant.
Keywords
NGRAM_SEARCH,NGRAM,SEARCH