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

Apakah operator pencarian frasa <-> berfungsi dengan dokumen JSONB atau hanya tabel relasional?

Kemampuan pencarian frase terintegrasi ke dalam pencarian teks data ketik tsquery . Operator penelusuran teks @@ yang Anda tampilkan mengambil tsvector ke kiri dan tsquery ke kanan. Dan tsvector dapat dibuat dari jenis karakter apa pun serta dari dokumen JSON.

Terkait:

Anda dapat mengonversi json . Anda atau jsonb dokumen ke vektor pencarian teks dengan salah satu khusus fungsi :

to_tsvector()
json(b)_to_tsvector()

Perhatikan bahwa ini hanya menyertakan nilai dari dokumen JSON, bukan kunci . Biasanya, itulah yang Anda inginkan. Contoh dasar:

SELECT to_tsvector(jsonb '{"foo":"jump quickly"}')
    @@ to_tsquery('jump <-> quick:*');

Mendemonstrasikan pencocokan awalan di atas pencarian frase saat berada di sana. Lihat:

Alternatifnya , Anda cukup membuat tsvector dari text representasi dokumen JSON Anda untuk juga menyertakan nama kunci:

SELECT to_tsvector((jsonb '{"foo-fighter":"jump quickly"}')::text)
    @@ to_tsquery('foo <-> fight:*');

Menghasilkan tsvector yang lebih besar , tentu saja.

Keduanya dapat diindeks (yang merupakan poin utama dari pencarian teks). Hanya indeks yang terikat ke tabel relasional. (Dan Anda dapat mengindeks ekspresi !)
Ekspresi itu sendiri dapat diterapkan ke nilai apa pun, tidak terikat pada tabel seperti yang Anda maksudkan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. org.postgresql.util.PSQLException:FATAL:tidak ada entri pg_hba.conf untuk host

  2. Menggunakan fungsi jendela OVER di SQLAlchemy

  3. Array TypeORM tidak didukung di postgres?

  4. Kesalahan Castle Activerecord adalah "hubungan tidak ada" di Postgresql?

  5. Kekurangan tabel dengan terlalu banyak kolom