ApsaraDB RDS for PostgreSQLは、fuzzystrmatch拡張機能を提供します。 この拡張機能は、Soundex、Levenshtein、Metaphone、およびDouble Metaphoneアルゴリズムをサポートします。 これらのアルゴリズムを使用して、文字列間の類似度と距離を計算できます。
fuzzystrmatch拡張機能の有効化または無効化
- fuzzystrmatch拡張を有効にします。
拡張fuzzystrmatchを作成します。
- fuzzystrmatch拡張機能を無効にします。
ドロップ拡張fuzzystrmatch;
Soundex
Soundexアルゴリズムは、類似音の単語を同じコードに変換します。 ただし、このアルゴリズムは英語以外の単語には適していません。
Soundexアルゴリズムは、次の関数を提供します。
soundex(text) はテキストを返します
difference(text, text) returns int
- soundex関数は、文字列をA550などのSoundexコードに変換します。
- 差分関数は、2つの文字列をそれらのSoundexコードに変換します。 次に、差分関数は、2つの文字列間の位置に一致するコードの数を報告する。 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テキスト);
INSERT INTO s VALUES ('john');
INSERT INTO s VALUES ('joan');
値に挿入する (「ぐらつく」);
INSERT INTO s VALUES ('jack ');
SELECT * FROM WHERE soundex(nm) = soundex('john');
SELECT * からs WHERE差 (s.nm、'john') > 2;
レーベンシュタイン
Levenshteinアルゴリズムは、2つの文字列間のLevenshtein距離を計算します。
Levenshteinアルゴリズムは、次の関数を提供します。
levenshtein (テキストソース、テキストターゲット、int ins_cost、int del_cost、int sub_cost) はintを返します。levenshtein (テキストソース、テキストターゲット) はintを返します
levenshtein_less_equal (テキストソース、テキストターゲット、int ins_cost、int del_cost、int sub_cost、int max_d) はintを返します。levenshtein_less_equal (テキストソース、テキストターゲット、int max_d) はint
を返します次の表に、上記の関数で設定する必要があるパラメーターを示します。
パラメーター | 説明 |
ソース | 最初の文字列。 文字列は空にすることはできず、最大255文字の長さを含めることができます。 |
ターゲット | 2番目の文字列。 文字列は空にすることはできず、最大255文字の長さを含めることができます。 |
ins_cost | 文字を挿入するために必要なオーバーヘッド。 |
del_cost | 文字を削除するために必要なオーバーヘッド。 |
sub_cost | 文字を置き換えるために必要なオーバーヘッド。 |
max_d | 指定された2つの文字列間で許可される最大のレーベンシュタイン距離。 |
- 実際の距離がmax_dパラメーターの値以下の場合、levenshtein_less_equal関数は計算された正確な距離を返します。
- 実際の距離がmax_dパラメーターの値よりも大きい場合、levenshtein_less_equal関数はmax_dパラメーターの値よりも大きいランダムな距離を返します。
- max_dパラメーターの値が負の場合、levenshtein_less_equal関数と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);
メタフォン
Metaphoneアルゴリズムは、Soundexアルゴリズムと同じように機能します。 Metaphoneアルゴリズムは、指定された文字列ごとに代表コードを作成します。 2つの文字列が同じ代表コードを有する場合、Metaphoneアルゴリズムはそれらが類似しているとみなす。
Metaphoneアルゴリズムは、次の関数を提供します。
metaphone(text source, int max_output_length) returns text
次の表に、上記の関数で設定する必要があるパラメーターを示します。
パラメーター | 説明 |
ソース | 空ではない文字列。 文字列の長さは最大255文字です。 |
max_output_length | 返されるMetaphoneコードの最大長。 メタフォン・コードが最大長を超える場合、メタフォン・アルゴリズムはメタフォン・コードを最大長に切り捨てる。 |
例:
SELECTメタフォン ('GUMBO', 4);
二重メタフォン
Double Metaphoneアルゴリズムは、指定された文字列に対して2つの類似したサウンディングコードを取得します。 これらのコードは、一次コードおよび二次コードを含む。 ほとんどの場合、2つのコードは同じです。 英語以外の単語を指定すると、少し異なる場合があります。 違いは発音によって異なります。
Double Metaphoneアルゴリズムは、次の関数を提供します。
dmetaphone (テキストソース) はテキストを返します
dmetaphone_alt (テキストソース) はテキスト
を返します例:
dmetaphone('gumbo') を選択します。選択dmetaphone_alt('gumbo');