首页 文章

PostgreSQL JSON快速搜索(从任意键搜索值)

提问于
浏览
3

我试图在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 回答

  • 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 .

  • 0

    https://github.com/postgrespro/jsquery可能对你正在寻找的东西很有用,虽然我以前没用过它 .

相关问题