メインコンテンツまでスキップ
に最終更新

NGRAM_SEARCH

説明​

NGRAM_SEARCH 関数は、文字列間の N-gram 類似度を計算します。類似度は 0 から 1 の範囲で、値が大きいほど文字列が似ていることを示します。

N-gram は、文字列を連続する N 文字の集合に分解します。類似度の計算式は 2 * |intersection| / (|set1| + |set2|) です。

ASCII 文字のみをサポートします。

構文​

NGRAM_SEARCH(<text>, <pattern>, <gram_num>)

パラメータ​

パラメータ説明
<text>比較するテキスト文字列。型: VARCHAR
<pattern>パターン文字列(定数である必要があります)。型: VARCHAR
<gram_num>N-gram の N の値。正の整数定数である必要があります。型: INT。

戻り値​

文字列間の N-gram 類似度(0 から 1)を DOUBLE 型で返します。

特殊なケース:

  • <text> または <pattern> が NULL の場合は NULL を返します。<gram_num> は正の整数定数である必要があり、NULL にはできません
  • 文字列の長さが <gram_num> より短い場合は 0 を返します
  • <pattern> と <gram_num> は定数である必要があります。Doris 4.1 系列の 4.1.5 以降では、0、負の数、整数以外の定数など、無効な <gram_num> の値を指定すると明示的にエラーが報告されます
  • 類似度が 1 でも、文字列が完全に同一であるとは限りません

例​

  1. 基本的な使用方法: 類似度を計算する
SELECT ngram_search('123456789', '12345', 3);
+---------------------------------------+
| ngram_search('123456789', '12345', 3) |
+---------------------------------------+
| 0.6 |
+---------------------------------------+
  1. 類似度が高い例
SELECT ngram_search('abababab', 'babababa', 2);
+-----------------------------------------+
| ngram_search('abababab', 'babababa', 2) |
+-----------------------------------------+
| 1 |
+-----------------------------------------+
  1. 文字列が短すぎる場合は 0 を返す
SELECT ngram_search('ab', 'abc', 3);
+----------------------------------+
| ngram_search('ab', 'abc', 3) |
+----------------------------------+
| 0 |
+----------------------------------+
  1. 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.

キーワード​

NGRAM_SEARCH,NGRAM,SEARCH