给定以下数据集:
-- Create random table
CREATE TABLE sample (
id serial primary key,
content jsonb
);
-- Insert sample rows
INSERT INTO sample (content)
VALUES
('{"text": ["Lorem ipsum dolor sit amet","consectetur adipiscing elit","sed do eiusmod tempor incididunt","ut labore et dolore magna aliqua"]}'),
('{"text": ["Ut enim ad minim veniam","quis nostrud exercitation ullamco laboris","nisi ut aliquip ex ea commodo consequat","Duis aute irure dolor in reprehenderit","voluptate velit esse cillum dolore"]}'),
('{"text": ["eu fugiat nulla pariatur","Excepteur sint occaecat cupidatat","non proident, sunt in culpa qui","officia deserunt mollit anim id est laborum"]}')
;
content
是一个 JSONB 列,其中包含text
一个 Json 文本数组的键。
我希望能够ILIKE
使用索引在此文本中搜索或类似功能。
从功能上讲,这是可行的,这就是我想做的:
WITH ctr AS (
SELECT id, jsonb_array_elements_text((content->>'text')::jsonb) as mytext
FROM sample
)
SELECT id
FROM ctr
WHERE mytext ILIKE '%qui%';
id
----
2
2
3
(3 rows)
是否有使用索引具有相同输出的解决方案?我正在寻找一个非常大的数据集。
看起来不可能使用三元组索引 ( ERROR: operator class "gist_trgm_ops" does not accept data type jsonb
)