2016-04-03 13 views
0

個人のプロフィールをJSONとして受信します。どのように私はmodelこのJSONドキュメントのすべての値が検索可能な方法でそれを行うことができますか?
jsonドキュメントを検索する必要があるだけでなく、また、「タランティーノ映画が好きな人をすべて見つける」のようにクエリー可能でなければなりません。 このドキュメントは、1対多数の関係を持つリレーショナル・モデルで定義できます。しかし、このアプローチでは、クライアント側からのフリーテキスト検索は許可されません。
このようなシナリオを処理するより良い方法はありますか?
文書は次のようになります。他の選択基準は、同様の方法でモデル化することができる検索可能で問い合わせ可能なjsonドキュメントをPostgresに保存するには?

select persons->>'name' from jdoc,json_array_elements(jdoc.persons->'movies') movies where movies->>'director' ~ 'Tarantino'; 

{ 
    "name":"FirstN LastN", 
    "photo":nicephoto.jpg, 
    "location":"Boston, MA", 
    "contacts":[ 
     { 
     "type":"phone", 
     "value":"701290012734" 
     }, 
     { 
     "type":"email", 
     "value":"[email protected]" 
     } 
    ], 
    "movies":[ 
     { 
     "name":"The Godfather", 
     "director":"Francis Ford Coppola", 
     "releaseYear":"1972", 
     "favQuote":"I'm gonna make him an offer he can't refuse. Okay?" 
     }, 
     { 
     "name":"Pulp Fiction", 
     "director":"Quentin Tarantino", 
     "releaseYear":"1994", 
     "favQuote":"Just because you are a character doesn't mean that you have character." 
     } 
    ], 
    "school":null, 

} 
+0

ソリューションのアプローチとしては(ない完全な答えは、私は怖い):してみてください完全なリレーショナル・スキーマとjsonの直接索引付け。 – miw

+0

「jsonでのダイレクトインデックス作成」とはどういう意味ですか? –

+0

最初は、全文索引のプレーンテキストを考えましたが、それは自然言語のためだけではあまり役に立ちません。 PostgresにはJSONのサポートが組み込まれています:http://www.postgresql.org/docs/9.5/static/datatype-json.html – miw

答えて

0

「タランティーノの映画のようにすべての人を見つける」のように書かれたか、SQLに変換する必要があります。

はPostgresの9.3以降が必要

http://sqlfiddle.com/#!15/652eb/10

の質問に "どのように保存する":

create table jdoc (persons json); 
insert into jdoc values ('{ 
    "name":"FirstN LastN", 
    "photo":"nicephoto.jpg", 
    "location":"Boston, MA", 
    "contacts":[ 
     { 
     "type":"phone", 
     "value":"701290012734" 
     }, 
     { 
     "type":"email", 
     "value":"[email protected]" 
     } 
    ], 
    "movies":[ 
     { 
     "name":"The Godfather", 
     "director":"Francis Ford Coppola", 
     "releaseYear":"1972", 
     "favQuote":"Im gonna make him an offer he cant refuse. Okay?" 
     }, 
     { 
     "name":"Pulp Fiction", 
     "director":"Quentin Tarantino", 
     "releaseYear":"1994", 
     "favQuote":"Just because you are a character doesnt mean that you have character." 
     } 
    ], 
    "school":null 

}') 
; 
関連する問題