ดังนั้นฉันจึงมีjsonb
คอลัมน์ที่มีรายการเช่นนี้: https://pastebin.com/LxJ8rKk4
มีวิธีใดบ้างที่จะใช้การค้นหาข้อความแบบเต็มในคอลัมน์ jsonb ทั้งหมด?
ดังนั้นฉันจึงมีjsonb
คอลัมน์ที่มีรายการเช่นนี้: https://pastebin.com/LxJ8rKk4
มีวิธีใดบ้างที่จะใช้การค้นหาข้อความแบบเต็มในคอลัมน์ jsonb ทั้งหมด?
คำตอบ:
PostgreSQL 10 แนะนำการค้นหาข้อความแบบเต็มบน JSONB
CREATE INDEX ON table
USING gin ( to_tsvector('english',jsondata) );
การจัดทำดัชนี FTS ใหม่บน JSON ทำงานร่วมกับการค้นหาวลีและข้ามทั้ง JSON-markup และคีย์
คุณสามารถทำได้แม้ว่าการปฏิบัตินั้นจะไม่ชัดเจนก็ตาม:
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))) ;
จากนั้นสอบถามด้วย:
SELECT
the_data
FROM
t
WHERE
to_tsvector('English', the_data::text) @@ plainto_tsquery('English', 'Action') ;
หมายเหตุว่านี้จะยังพบวัตถุทุกคีย์ไม่เพียง แต่ค่า และคุณจะถูก จำกัด จำนวนข้อความ
dbfiddle ที่นี่