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" }
                      }
                  }
        }
    }
}