全部产品
Search
文档中心

ApsaraDB RDS:Gunakan ekstensi fuzzystrmatch untuk menghitung kesamaan antara string

更新时间:Jun 25, 2025

ApsaraDB RDS for PostgreSQL menyediakan ekstensi fuzzystrmatch. Ekstensi ini mendukung algoritma Soundex, Levenshtein, Metaphone, dan Double Metaphone. Anda dapat menggunakan algoritma tersebut untuk menghitung kesamaan dan jarak antara string.

Aktifkan atau nonaktifkan ekstensi fuzzystrmatch

  • Aktifkan ekstensi fuzzystrmatch.
    CREATE EXTENSION fuzzystrmatch;
  • Nonaktifkan ekstensi fuzzystrmatch.
    DROP EXTENSION fuzzystrmatch;

Soundex

Algoritma Soundex mengonversi kata-kata dengan bunyi serupa menjadi kode yang sama. Namun, algoritma ini tidak cocok untuk kata-kata non-Inggris.

Algoritma Soundex menyediakan fungsi-fungsi berikut:

soundex(text) returns text
difference(text, text) returns int
  • Fungsi soundex mengonversi string menjadi kode Soundex-nya, seperti A550.
  • Fungsi difference mengonversi dua string menjadi kode Soundex mereka. Kemudian, fungsi difference melaporkan jumlah posisi kode yang cocok di antara kedua string tersebut. Kode Soundex terdiri dari empat karakter, sehingga jumlah posisi kode yang cocok berkisar dari 0 hingga 4. Nilai 0 menunjukkan kecocokan nol, sedangkan nilai 4 menunjukkan kecocokan tepat.

Contoh:

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

Algoritma Levenshtein menghitung jarak Levenshtein antara dua string.

Algoritma Levenshtein menyediakan fungsi-fungsi berikut:

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

Tabel berikut menjelaskan parameter yang harus dikonfigurasi dalam fungsi-fungsi di atas.

ParameterDeskripsi
sourceString pertama. String ini tidak boleh kosong dan dapat berisi hingga 255 karakter.
targetString kedua. String ini tidak boleh kosong dan dapat berisi hingga 255 karakter.
ins_costOverhead yang diperlukan untuk menyisipkan karakter.
del_costOverhead yang diperlukan untuk menghapus karakter.
sub_costOverhead yang diperlukan untuk mengganti karakter.
max_dJarak Levenshtein maksimum yang diizinkan antara dua string yang ditentukan.
Catatan Fungsi levenshtein_less_equal adalah versi akselerasi dari fungsi levenshtein. Fungsi ini hanya digunakan untuk menghitung jarak Levenshtein pendek:
  • Jika jarak sebenarnya kurang dari atau sama dengan nilai parameter max_d, fungsi levenshtein_less_equal mengembalikan jarak tepat yang dihitung.
  • Jika jarak sebenarnya lebih besar dari nilai parameter max_d, fungsi levenshtein_less_equal mengembalikan jarak acak yang lebih besar dari nilai parameter max_d.
  • Jika nilai parameter max_d negatif, fungsi levenshtein_less_equal dan levenshtein mengembalikan jarak yang sama.

Contoh:

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

Algoritma Metaphone bekerja dengan cara yang sama seperti algoritma Soundex. Algoritma Metaphone membangun kode representatif untuk setiap string yang ditentukan. Jika dua string memiliki kode representatif yang sama, algoritma Metaphone menganggap mereka serupa.

Algoritma Metaphone menyediakan fungsi-fungsi berikut:

metaphone(text source, int max_output_length) returns text

Tabel berikut menjelaskan parameter yang harus dikonfigurasi dalam fungsi-fungsi di atas.

ParameterDeskripsi
sourceString yang tidak kosong. String ini dapat berisi hingga 255 karakter.
max_output_lengthPanjang maksimum kode Metaphone yang dapat dikembalikan. Jika kode Metaphone melebihi panjang maksimum, algoritma Metaphone akan memotong kode Metaphone ke panjang maksimum.

Contoh:

SELECT metaphone('GUMBO', 4);

Double Metaphone

Algoritma Double Metaphone mendapatkan dua kode dengan bunyi serupa untuk string yang ditentukan. Kode-kode ini mencakup kode utama dan kode sekunder. Dalam kebanyakan kasus, kedua kode tersebut sama. Mereka mungkin sedikit berbeda ketika Anda menentukan kata non-Inggris. Perbedaan bervariasi berdasarkan pengucapan.

Algoritma Double Metaphone menyediakan fungsi-fungsi berikut:

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

Contoh:

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