2017-04-05 20 views
3

私はPostgreSQL JSONBカラム内のクイック検索機能の解決策を見つけようとしています。要件は、任意のJSONキーで値を検索できることです。PostgreSQL JSONクイック検索(任意のキーからの検索値)

表構造:

TABLEエンティティ( 識別BIGINT NULL NOT、 JTYPEキャラクタ変化(64)、NOT NULL、 JDATA jsonb、 CONSTRAINT entity_pk PRIMARY KEY(ID)を)を作成

アイデアは、1つのテーブルに異なるタイプの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」と入力して社内で働いている会社と社員の両方のレコードを検索できるクイック検索を行うことです。

オラクルDBのアナログ機能が含まれて:

SELECT JTYPE、(jvalue、 'ABS')を含むエンティティからjvalueを> 0。

GINインデックスのみ

GINインデックスを効率的jsonb文書(データム)の多数内で発生するキーまたはキー/値 ペアを検索するために使用することができる検索キー/値のペアを可能にします。 2つの GIN「オペレータクラス」が提供され、異なるパフォーマンスの と柔軟性のトレードオフを提供します。

https://www.postgresql.org/docs/current/static/datatype-json.html#JSON-INDEXING

答えて

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

Thnk's、私たちはPosgresql 10に移行しました。この機能を使用します – karuuzo

関連する問題