3

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

4

2 に答える 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"

詳細なドキュメントはこちらにあります。

于 2017-09-22T17:50:43.690 に答える