我试图在PostgreSQL JSONB列中找到快速搜索功能的解决方案 . 要求是我们可以在任何JSON密钥中搜索值 .
表结构:
CREATE TABLE实体(id bigint NOT NULL,jtype字符vary(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”并找到两个记录 - 公司和在公司工作的人 .
Analog for 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
2 回答
从Postgresql 10开始,您可以在JSON / JSONB列上创建索引,然后在该列的值内进行全文搜索:
可以找到更多文档here .
https://github.com/postgrespro/jsquery可能对你正在寻找的东西很有用,虽然我以前没用过它 .