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 intTabel berikut menjelaskan parameter yang harus dikonfigurasi dalam fungsi-fungsi di atas.
| Parameter | Deskripsi |
| source | String pertama. String ini tidak boleh kosong dan dapat berisi hingga 255 karakter. |
| target | String kedua. String ini tidak boleh kosong dan dapat berisi hingga 255 karakter. |
| ins_cost | Overhead yang diperlukan untuk menyisipkan karakter. |
| del_cost | Overhead yang diperlukan untuk menghapus karakter. |
| sub_cost | Overhead yang diperlukan untuk mengganti karakter. |
| max_d | Jarak Levenshtein maksimum yang diizinkan antara dua string yang ditentukan. |
- 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);
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 textTabel berikut menjelaskan parameter yang harus dikonfigurasi dalam fungsi-fungsi di atas.
| Parameter | Deskripsi |
| source | String yang tidak kosong. String ini dapat berisi hingga 255 karakter. |
| max_output_length | Panjang 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 textContoh:
select dmetaphone('gumbo');
select dmetaphone_alt('gumbo');