跳到主要内容
版本: 最新版本-3.5

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。
    • 如果 haystackneedle 值的长度小于 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 |
+--------------------------------------+-------------------+