メインコンテンツまでスキップ
バージョン: Stable-3.3

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 |
+--------------------------------------+-------------------+