2016-11-27 10 views
0

id:25の親 "blog"と少なくとも1人の子供 "comment"を持つ "posts"を持つすべての "投稿"を取得したいelasticsearchにchildとparent_idを持つすべての子を取得する

私はelasticsearchを初めて使っています。バージョン5

を使用してこれまでのところ、私はこれまで私が持っている私はparent_idhas_childhas_parent

ない私は、これらのクエリを組み合わせることができますどのようにしてください...

を使用することができることを知っている:

GET /blog/post/_search 
{ 
    "query": { 
     "parent_id" : { 
      "type" : "post", 
      "id" : "25" 
     } 
    } 
} 

答えて

0

bool queryを使用してクエリを組み合わせることができます。
だから、あなたは、この例に似た、あなたのマッピングとデータを作成したと仮定すると:

PUT /blog 
{ 
    "mappings": { 
    "blog": {}, 
    "post": { 
     "_parent": { 
     "type": "blog" 
     } 
    }, 
    "comment": { 
     "_parent": { 
     "type": "post" 
     } 
    } 
    } 
} 

POST /blog/blog/_bulk 
{ "index": { "_id": "21" }} 
{ "name": "blog 11"} 
{ "index": { "_id": "25" }} 
{ "name": "blog 25" } 
{ "index": { "_id": "22" }} 
{ "name": "blog 24"} 

POST /blog/post/_bulk 
{ "index": { "_id": "1", "parent": "21" }} 
{ "name": "post of blog 21 (with comments)"} 
{ "index": { "_id": "2", "parent": "25" }} 
{ "name": "post of blog 25 (with comments)"} 
{ "index": { "_id": "3", "parent": "25" }} 
{ "name": "post of blog 25 (without comments)"} 

POST /blog/comment/_bulk 
{ "index": { "_id": "10", "parent": "1", "routing": "21"}} 
{ "name": "comment for post 1"} 
{ "index": { "_id": "11", "parent": "2", "routing": "25" }} 
{ "name": "comment for post 2"} 

あなたのクエリは次のとおりです。

GET blog/post/_search 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "parent_id": { 
      "type": "post", 
      "id": "25" 
      } 
     }, 
     { 
      "has_child": { 
      "type": "comment", 
      "query": { 
       "match_all": { 

       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

多分でnestedタイプとしてあなたのコメントを保存するために、より適しているであろう投稿。
nestedparent/childの関係hereの相違点の詳細を読むことができます。

関連する問題