全部產品
Search
文件中心

ApsaraDB RDS:字串相似性判斷(fuzzystrmatch)

更新時間:Feb 28, 2024

RDS PostgreSQL支援fuzzystrmatch外掛程式,提供Soundex、Levenshtein、Metaphone和Double Metaphone四種功能,能夠用來判斷字串之間的相似性和距離。

外掛程式開啟與關閉

  • 開啟外掛程式。
    CREATE EXTENSION fuzzystrmatch;
  • 關閉外掛程式。
    DROP EXTENSION fuzzystrmatch;

Soundex

Soundex功能可以將相似發音的名字轉換成相同的代碼並進行匹配,但是Soundex對於非英語名稱效果較差。

Soundex功能提供如下函數:

soundex(text) returns text
difference(text, text) returns int
  • soundex函數將一個字串轉換成它的Soundex代碼(例如A550)。
  • difference函數將兩個字串轉換成它們的Soundex代碼並報告兩個代碼匹配位置的數量。由於Soundex代碼具有四個字元,代碼匹配位置數量的取值範圍是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功能可以計算兩個字串之間的編輯距離(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

參數說明如下。

參數說明
source第一個字串,任意非Null 字元串, 最長支援255個字元。
target第二個字串,任意非Null 字元串, 最長支援255個字元。
ins_cost字元插入的開銷。
del_cost字元刪除的開銷。
sub_cost字元替換的開銷。
max_d最大Levenshtein距離。
說明 levenshtein_less_equal函數是Levenshtein函數的加速版本,在只計算小距離時使用:
  • 如果實際的距離低於或等於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);
Levenshtein

Metaphone

Metaphone功能的思想和Soundex功能相同,構建一個輸入字串的表示代碼,如果兩個字串具有相同的代碼則認為它們相似。

Metaphone功能提供如下函數:

metaphone(text source, int max_output_length) returns text

參數說明如下。

參數說明
source任意非Null 字元串, 最長支援255個字元。
max_output_length設定輸出的metaphone代碼的最大長度,如果超長,輸出會被截斷到這個長度。

用法樣本如下:

SELECT metaphone('GUMBO', 4);

Double Metaphone

Double Metaphone功能能夠為一個輸入的字串計算出兩個相似的字串,包括一個主要函數和一個次要函數。在大部分情況下它們是相同的,但是對於非英語名稱它們可能有一點不同(取決於發音)。

Double Metaphone功能提供的主要和次要函數如下:

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

用法樣本如下:

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