ngram_search
2 つの文字列の ngram 類似度を計算します。
備考
- 現在、文字エンコーディングは ASCII エンコーディングのみをサポートしており、UTF-8 エンコーディングはサポートしていません。
- 関数
ngram_searchは大文字と小文字を区別します。別の関数ngram_search_case_insensitiveは大文字と小文字を区別しません。それ以外は、これら 2 つの関数は同じです。
構文
DOUBLE ngram_search(VARCHAR haystack, VARCHAR needle, INT gram_num)
パラメータ
-
haystack: 必須、比較する最初の文字列。VARCHAR 値でなければなりません。列名または定数値にすることができます。haystackが列名であり、その列に N-Gram ブルームフィルターインデックスが作成されている場合、インデックスはngram_search関数の計算速度を向上させることができます。 -
needle: 必須、比較する 2 番目の文字列。VARCHAR 値でなければなりません。定数値のみ可能です。ヒントneedleの値の長さは 2^15 を超えることはできません。そうでない場合、エラーが発生します。haystackの値の長さが 2^15 を超える場合、この関数は 0 を返します。haystackまたはneedleの値の長さがgram_numより小さい場合、この関数は 0 を返します。
-
gram_num: 必須、グラムの数を指定するために使用されます。推奨値は4です。
戻り値
これら 2 つの文字列がどれだけ類似しているかを示す値を返します。返される値の範囲は 0 から 1 です。この値が大きいほど、2 つの文字列はより類似しています。
例
-- haystack と needle の値は定数値です。
mysql> select ngram_search('English', 'England',4);
+---------------------------------------+
| ngram_search('English', 'England', 4) |
+---------------------------------------+
| 0.25 |
+---------------------------------------+
-- haystack の値は列名であり、needle の値は定数値です。
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 |
+--------------------------------------+-------------------+