すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:文字列の類似性判定 (fuzzystrmatch)

最終更新日:Jun 21, 2026

ApsaraDB RDS for PostgreSQL は fuzzystrmatch 拡張機能を提供します。この拡張機能は、Soundex、Levenshtein、Metaphone、Double Metaphone の各アルゴリズムをサポートします。これらのアルゴリズムを使用して、文字列間の類似性と距離を計算できます。

fuzzystrmatch 拡張機能の有効化と無効化

  • 拡張機能を有効化します。

    CREATE EXTENSION fuzzystrmatch;
  • 拡張機能を無効化します。

    DROP EXTENSION fuzzystrmatch;

Soundex

Soundex アルゴリズムは、発音が似ている単語を同一のコードに変換します。ただし、このアルゴリズムは英語以外の単語には適していません。

Soundex アルゴリズムは、次の関数を提供します:

soundex(text) returns text
difference(text, text) returns int
  • soundex 関数は、文字列を Soundex コード (例:A550) に変換します。

  • difference 関数は、2 つの文字列をそれぞれ Soundex コードに変換し、コードが一致する位置の数を返します。Soundex コードは 4 文字であるため、結果は 0~4 の範囲になります。値 0 は一致なし、4 は完全一致を示します。

例:

SELECT soundex('hello world!');
SELECT soundex('Anne'), soundex('Andrew'), difference('Anne', 'Andrew');
SELECT soundex('Anne'), soundex('Margaret'), difference('Anne', 'Margaret');
CREATE TABLE s (nm text);
INSERT INTO s VALUES ('john');
INSERT INTO s VALUES ('joan');
INSERT INTO s VALUES ('wobbly');
INSERT INTO s VALUES ('jack');
SELECT * FROM s WHERE soundex(nm) = soundex('john');
SELECT * FROM s WHERE difference(s.nm, 'john') > 2;

Levenshtein

Levenshtein アルゴリズムは、2 つの文字列間の Levenshtein 距離を計算します。

Levenshtein アルゴリズムは、次の関数を提供します:

levenshtein(text source, text target, int ins_cost, int del_cost, int sub_cost) returns int
levenshtein(text source, text target) returns int
levenshtein_less_equal(text source, text target, int ins_cost, int del_cost, int sub_cost, int max_d) returns int
levenshtein_less_equal(text source, text target, int max_d) returns int

次の表で、これらの関数で使用するパラメーターについて説明します。

パラメーター

説明

ソース

1 つ目の文字列。空にすることはできず、最大 255 文字です。

ターゲット

2 つ目の文字列。空にすることはできず、最大 255 文字です。

ins_cost

文字の挿入コストです。

del_cost

文字の削除コストです。

sub_cost

文字の置換コストです。

max_d

Levenshtein 距離の最大値です。

説明

levenshtein_less_equal 関数は levenshtein 関数の最適化版であり、距離が小さいかどうかを確認する場合に有用です:

  • 実際の距離が max_d 以下の場合、関数は正確な距離を返します。

  • 実際の距離が max_d より大きい場合、関数は max_d より大きい値を返します。

  • max_d が負の場合、関数は levenshtein 関数と同様に動作します。

例:

SELECT levenshtein('GUMBO', 'GAMBOL');
SELECT levenshtein('GUMBO', 'GAMBOL', 2,1,1);
SELECT levenshtein_less_equal('extensive', 'exhaustive',2);
SELECT levenshtein_less_equal('extensive', 'exhaustive',4);
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
 levenshtein
-------------
           2
(1 row)
test=# SELECT levenshtein('GUMBO', 'GAMBOL', 2,1,1);
 levenshtein
-------------
           3
(1 row)
test=# SELECT levenshtein_less_equal('extensive', 'exhaustive',2);
 levenshtein_less_equal
------------------------
                      3
(1 row)
test=# SELECT levenshtein_less_equal('extensive', 'exhaustive',4);
 levenshtein_less_equal
------------------------
                      4
(1 row)

Metaphone

Metaphone アルゴリズムは Soundex アルゴリズムと同様に動作します。Metaphone アルゴリズムは、指定した各文字列に対して代表コードを生成します。2 つの文字列の代表コードが同じ場合、Metaphone アルゴリズムはそれらを類似していると見なします。

Metaphone アルゴリズムは、次の関数を提供します:

metaphone(text source, int max_output_length) returns text

次の表で、この関数で使用するパラメーターについて説明します。

パラメーター

説明

ソース

ソース文字列。空にすることはできず、最大 255 文字です。

max_output_length

出力される Metaphone コードの最大長。これより長いコードは切り捨てられます。

例:

SELECT metaphone('GUMBO', 4);

Double Metaphone

Double Metaphone アルゴリズムは、指定した文字列に対して発音が似ている 2 つのコードを取得します。これらのコードには、主コードと副コードが含まれます。ほとんどの場合、2 つのコードは同一です。英語以外の単語の場合、2 つのコードがわずかに異なることがあります。差異は発音に応じて変化します。

Double Metaphone アルゴリズムは、次の関数を提供します:

dmetaphone(text source) returns text
dmetaphone_alt(text source) returns text

例:

select dmetaphone('gumbo');
select dmetaphone_alt('gumbo');