我尝试在PostgreSQL JSONB列中找到快速搜索功能的解决方案。要求是我们可以在任何JSON密钥中搜索值。
表格结构:
CREATE TABLE实体( id bigint NOT NULL, jtype字符变化(64)NOT NULL, jdata jsonb, CONSTRAINT entity_pk PRIMARY KEY(id))
想法是我们在一个表中存储不同类型的jsons,jtype定义json实体类型,jdata - json数据,例如:
jtype='person',jvalue = '{"personName":"John", "personSurname":"Smith", "company":"ABS Software", "position":"Programmer"}'
jtype='company', jvalue='{"name":"ABS Software", "address":"Somewhere in Alaska"}'
目标是快速搜索用户可以输入' ABS'并找到两个记录 - 公司和在公司工作的人。
Oracle DB的模拟功能是CONTAINS:
SELECT jtype,jvalue FROM entity WHERE CONTAINS(jvalue,' ABS')> 0;
GIN索引仅允许搜索键/值对
GIN索引可用于有效搜索键或键/值 在大量jsonb文档(基准)中出现的对。二 GIN"运算符类"提供,提供不同的性能 和灵活性权衡。
https://www.postgresql.org/docs/current/static/datatype-json.html#JSON-INDEXING
答案 0 :(得分:0)
https://github.com/postgrespro/jsquery可能对您正在寻找的内容有用,尽管我之前没有使用它。
答案 1 :(得分:0)
从Postgresql 10开始,您可以在JSON / JSONB列上创建索引,然后在该列的值内进行全文搜索:
libdata=# SELECT bookdata -> 'title'
FROM bookdata
WHERE to_tsvector('english',bookdata) @@ to_tsquery('duke');
------------------------------------------
"The Tattooed Duke"
"She Tempts the Duke"
"The Duke Is Mine"
"What I Did For a Duke"
可以找到更多文档here。