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

String UTF-8 serupa untuk bidang pelengkapan otomatis

Anda tidak menggunakan kelas operator yang disediakan oleh pg_trgm modul. Saya akan membuat indeks seperti ini:

CREATE INDEX label_Lower_unaccent_trgm_idx
ON test_trgm USING gist (lower(unaccent_text(label)) gist_trgm_ops);

Awalnya, saya memiliki indeks GIN di sini, tetapi kemudian saya mengetahui bahwa GiST mungkin lebih cocok untuk kueri semacam ini karena dapat mengembalikan nilai yang diurutkan berdasarkan kesamaan. Selengkapnya:

  • Postgresql:Mencocokkan Pola antara Dua Kolom
  • Menemukan string serupa dengan PostgreSQL dengan cepat

Kueri Anda harus cocok dengan ekspresi indeks agar dapat menggunakannya.

SELECT label
FROM   the_table
WHERE  lower(unaccent_text(label)) % 'fil'
ORDER  BY similarity(label, 'fil') DESC -- it's ok to use original string here

Namun, "filbert" dan "filé powder" sebenarnya tidak terlalu mirip dengan "fil" menurut operator %. Saya menduga apa yang Anda inginkan adalah ini:

SELECT label
FROM   the_table
WHERE  lower(unaccent_text(label)) ~~ '%fil%'
ORDER  BY similarity(label, 'fil') DESC -- it's ok to use original string here

Ini akan menemukan semua string yang berisi string pencarian, dan mengurutkan yang paling cocok menurut % operator terlebih dahulu.

Dan bagian yang menarik:ekspresi dapat menggunakan indeks GIN atau GiST sejak PostgreSQL 9.1 ! Saya mengutip manual di pg_trgm moule:

Mulai dari PostgreSQL 9.1, jenis indeks ini juga mendukung pencarian indeks untuk LIKE dan ILIKE, misalnya

Jika Anda benar-benar bermaksud menggunakan % operator:

Sudahkah Anda mencoba menurunkan ambang untuk operator kesamaan % dengan set_limit() :

SELECT set_limit(0.1);

atau bahkan lebih rendah? Standarnya adalah 0,3. Hanya untuk melihat apakah ambang batas yang memfilter kecocokan tambahan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migrasi PostgreSQL ke Cloud - Membandingkan Solusi dari Amazon, Google &Microsoft

  2. Driver PostgreSQL 9.2 JDBC menggunakan zona waktu klien?

  3. Bagaimana menemukan tabel yang memiliki kolom tertentu di postgresql

  4. PG::ConnectionBad:fe_sendauth:tidak ada kata sandi yang diberikan

  5. Membandingkan Opsi Cloud Database untuk PostgreSQL