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

PostgreSQL:Temukan kalimat yang paling dekat dengan kalimat yang diberikan

Penelusuran Teks Lengkap (FTS)

Anda dapat menggunakan plainto_tsquery() ke (per dokumentasi ) ...

SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')

 plainto_tsquery
------------------
 'sentenc' & 'irrelev' & 'word' & 'punctuat'

Gunakan seperti:

SELECT *
FROM   tbl
WHERE  to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');

Tapi itu masih agak ketat dan hanya memberikan toleransi yang sangat terbatas untuk kesamaan.

Kesamaan trigram

Mungkin lebih cocok untuk mencari kesamaan , bahkan mengatasi kesalahan ketik sampai taraf tertentu.

Instal modul tambahan pg_trgm , buat indeks GiST dan gunakan operator kesamaan % dalam penelusuran tetangga terdekat :

Pada dasarnya, dengan indeks GiST trigram pada sentence :

-- SELECT set_limit(0.3);  -- adjust tolerance if needed

SELECT *
FROM   tbl
WHERE  sentence % 'My new sentence'
ORDER  BY sentence <-> 'My new sentence'
LIMIT  10;

Selengkapnya:

Gabungkan keduanya

Anda bahkan dapat menggabungkan kesamaan FTS dan trigram:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa nilai kolom default sqlalchemy tidak berfungsi

  2. cara mengonversi menit integer ke interval di postgres

  3. Menggunakan parameter sebagai nama kolom dalam fungsi Postgres

  4. di postgres pilih, kembalikan subquery kolom sebagai array?

  5. Apakah order by in view menjamin order pilih?