PostgreSQL JSONB 列内のクイック検索機能の解決策を見つけようとしています。要件は、任意の JSON キーで値を検索できることです。
テーブル構造:
CREATE TABLE エンティティ (id bigint NOT NULL、jtype character Various(64) NOT NULL、jdata jsonb、CONSTRAINT entity_pk PRIMARY KEY (id) )
アイデアは、異なるタイプの json を 1 つのテーブルに格納することです。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 ドキュメント (データム) 内で発生するキーまたはキーと値のペアを効率的に検索できます。2 つの GIN「演算子クラス」が提供され、異なるパフォーマンスと柔軟性のトレードオフを提供します。
https://www.postgresql.org/docs/current/static/datatype-json.html#JSON-INDEXING