我想获得所有“帖子”,其中包含ID为25的父“博客”,以及只有至少有一个孩子“评论”的“帖子”
我是elasticsearch的新手。使用版本5.
到目前为止,我知道我可以使用parent_id,has_child和has_parent
不确定如何合并这些查询...
到目前为止,我有:GET /blog/post/_search
{
"query": {
"parent_id" : {
"type" : "post",
"id" : "25"
}
}
}
答案 0 :(得分: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
类型存储在帖子中会更合适
您可以详细了解nested
和parent/child
关系here之间的区别。