PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Toán tử tìm kiếm cụm từ <-> có hoạt động với tài liệu JSONB hay chỉ các bảng quan hệ không?

Khả năng tìm kiếm cụm từ được tích hợp vào dữ liệu tìm kiếm văn bản loại tsquery . toán tử tìm kiếm văn bản @@ bạn hiển thị có tsvector ở bên trái và một tsquery rẽ phải. Và một tsvector có thể được tạo từ bất kỳ loại ký tự nào cũng như từ tài liệu JSON.

Có liên quan:

Bạn có thể chuyển đổi json của mình hoặc jsonb tài liệu đến vectơ tìm kiếm văn bản bằng một trong các chuyên dụng chức năng :

to_tsvector()
json(b)_to_tsvector()

Lưu ý rằng những điều này chỉ bao gồm giá trị từ tài liệu JSON, không phải từ khóa . Thông thường, đó là những gì bạn muốn. Ví dụ cơ bản:

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

Thể hiện đối sánh tiền tố trên đầu tìm kiếm cụm từ khi đang ở đó. Xem:

Ngoài ra , bạn có thể chỉ cần tạo tsvector từ text đại diện cho tài liệu JSON của bạn cũng bao gồm các tên khóa:

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

Tạo ra một tsvector lớn hơn , rõ ràng.

Cả hai đều có thể được lập chỉ mục (là điểm chính của tìm kiếm văn bản). Chỉ các chỉ mục được liên kết với các bảng quan hệ. (Và bạn có thể lập chỉ mục biểu thức !)
Bản thân biểu thức có thể được áp dụng cho bất kỳ giá trị nào, không bị ràng buộc với các bảng như bạn có vẻ ngụ ý.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có phải tham số bắt buộc recovery_target_timeline ='mới nhất' trong chuyển đổi và chuyển lại trong PostgreSQL 9.4.1 không?

  2. Làm cách nào để truy vấn các mảng lồng nhau trong một cột postgres json?

  3. Postgresql không tạo db với “createb” làm siêu người dùng, chưa xuất lỗi

  4. Python psycopg2 copy_from () để tải dữ liệu ném ra lỗi cho các giá trị số nguyên rỗng:DataError:cú pháp đầu vào không hợp lệ cho số nguyên:

  5. x là một thủ tục, sử dụng cuộc gọi khi tôi đang sử dụng cuộc gọi