2016-11-27 62 views
0

我想獲得的所有「上崗」,它具有父「博客」 ID爲所有的孩子:25,只有那些「上崗」,它至少有一個孩子「的評論」獲取其在elasticsearch兒童和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之間差異的更多信息。