PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara membuat pencarian fuzzy sederhana hanya dengan PostgreSQL?

Postgres menyediakan modul dengan beberapa fungsi perbandingan string seperti soundex dan metaphone. Tetapi Anda akan ingin menggunakan fungsi edit jarak levenshtein.

Example:

test=# SELECT levenshtein('GUMBO', 'GAMBOL');
 levenshtein
-------------
           2
(1 row)

2 adalah jarak edit antara dua kata. Saat Anda menerapkan ini pada sejumlah kata dan mengurutkan berdasarkan hasil edit jarak, Anda akan memiliki jenis pencocokan fuzzy yang Anda cari.

Coba contoh kueri ini:(tentu saja dengan nama objek dan data Anda sendiri)

SELECT * 
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10

Kueri ini mengatakan:

Beri saya 10 hasil teratas dari semua data dari some_table di mana jarak edit antara nilai kode dan input 'AB123-lHdfj' kurang dari 3. Anda akan mendapatkan kembali semua baris di mana nilai kode berada dalam perbedaan 3 karakter menjadi ' AB123-lHdfj'...

Catatan:jika Anda mendapatkan kesalahan seperti:

function levenshtein(character varying, unknown) does not exist

Instal fuzzystrmatch ekstensi menggunakan:

test=# CREATE EXTENSION fuzzystrmatch;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak ada pemetaan Dialek untuk tipe JDBC:2003

  2. PostgreSQL:NOT IN versus KECUALI perbedaan kinerja (diedit #2)

  3. Permintaan untuk elemen array di dalam tipe JSON

  4. psql perintah tidak valid \N saat memulihkan sql

  5. connection.select_value hanya mengembalikan string di postgres dengan permata pg