ngram_search
计算两个字符串的 ngram 相似度。
信息
- 目前,字符编码仅支持 ASCII 编码,不支持 UTF-8 编码。
- 函数
ngram_search
区分大小写。另一个函数ngram_search_case_insensitive
不区分大小写。除此之外,这两个函数是相同的。
语法
DOUBLE ngram_search(VARCHAR haystack, VARCHAR needle, INT gram_num)
参数
-
haystack
:必需,要比较的第一个字符串。它必须是 VARCHAR 值。它可以是列名或常量值。如果haystack
是列名,并且在该列的表中创建了 N-Gram bloom filter 索引,则该索引可以加速ngram_search
函数的计算速度。 -
needle
:必需,要比较的第二个字符串。它必须是 VARCHAR 值。它只能是常量值。提示needle
值的长度不能大于 2^15。否则会抛出错误。- 如果
haystack
值的长度大于 2^15,此函数将返回 0。 - 如果
haystack
或needle
值的长度小于gram_num
,此函数将返回 0。
-
gram_num
:必需,用于指定 grams 的数量。建议值为4
。
返回值
返回一个值,描述这两个字符串的相似程度。返回值的范围在 0 到 1 之间。此值越大,两个字符串越相似。
示例
-- The values of haystack and needle are const values.
mysql> select ngram_search('English', 'England',4);
+---------------------------------------+
| ngram_search('English', 'England', 4) |
+---------------------------------------+
| 0.25 |
+---------------------------------------+
-- The value of haystack is a column name and the value of needle is a const value.
mysql> select rowkey,ngram_search(rowkey,"31dc496b-760d-6f1a-4521-050073a70000",4) as string_similarity from string_table order by string_similarity desc limit 5;
+--------------------------------------+-------------------+
| rowkey | string_similarity |
+--------------------------------------+-------------------+
| 31dc496b-760d-6f1a-4521-050073a70000 | 1 |
| 31dc496b-760d-6f1a-4521-050073a40000 | 0.8787879 |
| 31dc496b-760d-6f1a-4521-05007fa70000 | 0.8787879 |
| 31dc496b-760d-6f1a-4521-050073a30000 | 0.8787879 |
| 31dc496b-760d-6f1a-4521-0500c3a70000 | 0.8787879 |
+--------------------------------------+-------------------+