Elasticsearch 嵌套父子映射
Elasticsearch Nested Parent-Child mapping
我想映射以下结构:
- 我有博客文章
- 博客文章可以有评论
- 评论可以有回复(也是评论),所以它应该是一个递归数据结构
POST -----*--> 评论
评论 -----*---> 评论
这是我尝试过的:
mappings: {
"comment": {
"properties": {
"content": { "type": "string" },
"replies": { "type": "comment" }
}
},
"post": {
"properties": {
"comments": {
"type": "comment"
}
}
}
}
当然不行。我怎样才能做到这一点?
您正在尝试像在 OO 编程中那样声明类型,这不是它在 ES 中的工作方式。您需要像下面那样使用 parent-child relationships,即 post
没有一个名为 comments
的字段,但是 comment
映射类型有一个 _parent
元字段引用post
父类型。
另外,为了对回复进行建模,我建议简单地使用另一个名为 in_reply_to
的字段,该字段将包含与回复相关的评论的 ID。这样就容易多了!
PUT blogs
{
"mappings": {
"post": {
"properties": {
"title": { "type": "string"}
}
},
"comment": {
"_parent": {
"type": "post"
},
"properties": {
"id": {
"type": "long"
}
"content": {
"type": "string"
},
"in_reply_to": {
"type": "long"
}
}
}
}
}
mappings: {
"post": {
"properties": {
"content": { "type": "string" },
"comment": {
"properties" : {
"content": { "type": "string" },
"replies": {
"properties" : {
"content": { "type": "string" }
}
}
}
}
}
我想映射以下结构: - 我有博客文章 - 博客文章可以有评论 - 评论可以有回复(也是评论),所以它应该是一个递归数据结构
POST -----*--> 评论
评论 -----*---> 评论
这是我尝试过的:
mappings: {
"comment": {
"properties": {
"content": { "type": "string" },
"replies": { "type": "comment" }
}
},
"post": {
"properties": {
"comments": {
"type": "comment"
}
}
}
}
当然不行。我怎样才能做到这一点?
您正在尝试像在 OO 编程中那样声明类型,这不是它在 ES 中的工作方式。您需要像下面那样使用 parent-child relationships,即 post
没有一个名为 comments
的字段,但是 comment
映射类型有一个 _parent
元字段引用post
父类型。
另外,为了对回复进行建模,我建议简单地使用另一个名为 in_reply_to
的字段,该字段将包含与回复相关的评论的 ID。这样就容易多了!
PUT blogs
{
"mappings": {
"post": {
"properties": {
"title": { "type": "string"}
}
},
"comment": {
"_parent": {
"type": "post"
},
"properties": {
"id": {
"type": "long"
}
"content": {
"type": "string"
},
"in_reply_to": {
"type": "long"
}
}
}
}
}
mappings: {
"post": {
"properties": {
"content": { "type": "string" },
"comment": {
"properties" : {
"content": { "type": "string" },
"replies": {
"properties" : {
"content": { "type": "string" }
}
}
}
}
}