Vì vậy, tôi có một jsonb
cột có các mục như thế này: https://pastebin.com/LxJ8rKk4
Có cách nào để thực hiện tìm kiếm toàn văn trên toàn bộ cột jsonb không?
Vì vậy, tôi có một jsonb
cột có các mục như thế này: https://pastebin.com/LxJ8rKk4
Có cách nào để thực hiện tìm kiếm toàn văn trên toàn bộ cột jsonb không?
Câu trả lời:
PostgreQuery 10 giới thiệu Tìm kiếm toàn văn trên JSONB
CREATE INDEX ON table
USING gin ( to_tsvector('english',jsondata) );
Lập chỉ mục FTS mới trên JSON hoạt động với tìm kiếm cụm từ và bỏ qua cả đánh dấu JSON và các khóa.
Bạn có thể, mặc dù điều đó thực tế không quá rõ ràng:
CREATE TABLE t
(
id SERIAL PRIMARY KEY,
the_data jsonb
) ;
CREATE INDEX idx_t_the_data_full_text
ON t
USING gist ( (to_tsvector('English', the_data::text))) ;
Và sau đó truy vấn nó bằng:
SELECT
the_data
FROM
t
WHERE
to_tsvector('English', the_data::text) @@ plainto_tsquery('English', 'Action') ;
Lưu ý rằng điều này cũng sẽ tìm thấy tất cả các khóa đối tượng của bạn , không chỉ các giá trị . Và bạn sẽ bị giới hạn số lượng văn bản
dbfiddle ở đây