【发布时间】:2017-08-31 09:48:19
【问题描述】:
我尝试在 PostgreSQL JSONB 列中找到快速搜索功能的解决方案。要求是我们可以在任何 JSON 键中搜索值。
表结构:
创建表实体 ( id bigint 非空, jtype 字符变化(64)NOT NULL, jdata jsonb, CONSTRAINT entity_pk PRIMARY KEY (id) )
想法是我们将不同类型的json存储在一张表中,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
【问题讨论】:
标签: json postgresql jsonb postgresql-9.6