1. 设置Mapping

  1. DELETE my_blogs
  2. # 设定 Parent/Child Mapping
  3. PUT my_blogs
  4. {
  5. "settings": {
  6. "number_of_shards": 2
  7. },
  8. "mappings": {
  9. "properties": {
  10. "blog_comments_relation": {
  11. "type": "join",
  12. "relations": {
  13. "blog": "comment"
  14. }
  15. },
  16. "content": {
  17. "type": "text"
  18. },
  19. "title": {
  20. "type": "keyword"
  21. }
  22. }
  23. }
  24. }

2. 索引父文档

  1. #索引父文档
  2. PUT my_blogs/_doc/blog1
  3. {
  4. "title":"Learning Elasticsearch",
  5. "content":"learning ELK @ geektime",
  6. "blog_comments_relation":{
  7. "name":"blog"
  8. }
  9. }
  10. #索引父文档
  11. PUT my_blogs/_doc/blog2
  12. {
  13. "title":"Learning Hadoop",
  14. "content":"learning Hadoop",
  15. "blog_comments_relation":{
  16. "name":"blog"
  17. }
  18. }

3. 索引子文档

  1. #索引子文档
  2. PUT my_blogs/_doc/comment1?routing=blog1
  3. {
  4. "comment":"I am learning ELK",
  5. "username":"Jack",
  6. "blog_comments_relation":{
  7. "name":"comment",
  8. "parent":"blog1"
  9. }
  10. }
  11. #索引子文档
  12. PUT my_blogs/_doc/comment2?routing=blog2
  13. {
  14. "comment":"I like Hadoop!!!!!",
  15. "username":"Jack",
  16. "blog_comments_relation":{
  17. "name":"comment",
  18. "parent":"blog2"
  19. }
  20. }
  21. #索引子文档
  22. PUT my_blogs/_doc/comment3?routing=blog2
  23. {
  24. "comment":"Hello Hadoop",
  25. "username":"Bob",
  26. "blog_comments_relation":{
  27. "name":"comment",
  28. "parent":"blog2"
  29. }
  30. }

4. Parent/Child所支持的查询

4.1 查询所有文档

  1. # 查询所有文档
  2. POST my_blogs/_search
  3. {
  4. }
  5. #####返回结果部分内容,发现它们都是独立的文档
  6. "hits" : [
  7. {
  8. "_index" : "my_blogs",
  9. "_type" : "_doc",
  10. "_id" : "blog1",
  11. "_score" : 1.0,
  12. "_source" : {
  13. "title" : "Learning Elasticsearch",
  14. "content" : "learning ELK @ geektime",
  15. "blog_comments_relation" : {
  16. "name" : "blog"
  17. }
  18. }
  19. },
  20. {
  21. "_index" : "my_blogs",
  22. "_type" : "_doc",
  23. "_id" : "blog2",
  24. "_score" : 1.0,
  25. "_source" : {
  26. "title" : "Learning Hadoop",
  27. "content" : "learning Hadoop",
  28. "blog_comments_relation" : {
  29. "name" : "blog"
  30. }
  31. }
  32. },
  33. {
  34. "_index" : "my_blogs",
  35. "_type" : "_doc",
  36. "_id" : "comment1",
  37. "_score" : 1.0,
  38. "_routing" : "blog1",
  39. "_source" : {
  40. "comment" : "I am learning ELK",
  41. "username" : "Jack",
  42. "blog_comments_relation" : {
  43. "name" : "comment",
  44. "parent" : "blog1"
  45. }
  46. }
  47. },
  48. {
  49. "_index" : "my_blogs",
  50. "_type" : "_doc",
  51. "_id" : "comment2",
  52. "_score" : 1.0,
  53. "_routing" : "blog2",
  54. "_source" : {
  55. "comment" : "I like Hadoop!!!!!",
  56. "username" : "Jack",
  57. "blog_comments_relation" : {
  58. "name" : "comment",
  59. "parent" : "blog2"
  60. }
  61. }
  62. },
  63. {
  64. "_index" : "my_blogs",
  65. "_type" : "_doc",
  66. "_id" : "comment3",
  67. "_score" : 1.0,
  68. "_routing" : "blog2",
  69. "_source" : {
  70. "comment" : "Hello Hadoop",
  71. "username" : "Bob",
  72. "blog_comments_relation" : {
  73. "name" : "comment",
  74. "parent" : "blog2"
  75. }
  76. }
  77. }
  78. ]

4.2 根据父文档ID查看

  1. #根据父文档ID查看,返回要查看的父文档
  2. GET my_blogs/_doc/blog2
  3. # Parent Id 查询,其下所属的子文档
  4. POST my_blogs/_search
  5. {
  6. "query": {
  7. "parent_id": {
  8. "type": "comment",
  9. "id": "blog2"
  10. }
  11. }
  12. }
  13. #####返回结果的部分内容,返回父文档id对应下的子文档
  14. "hits" : [
  15. {
  16. "_index" : "my_blogs",
  17. "_type" : "_doc",
  18. "_id" : "comment2",
  19. "_score" : 0.5389965,
  20. "_routing" : "blog2",
  21. "_source" : {
  22. "comment" : "I like Hadoop!!!!!",
  23. "username" : "Jack",
  24. "blog_comments_relation" : {
  25. "name" : "comment",
  26. "parent" : "blog2"
  27. }
  28. }
  29. },
  30. {
  31. "_index" : "my_blogs",
  32. "_type" : "_doc",
  33. "_id" : "comment3",
  34. "_score" : 0.5389965,
  35. "_routing" : "blog2",
  36. "_source" : {
  37. "comment" : "Hello Hadoop",
  38. "username" : "Bob",
  39. "blog_comments_relation" : {
  40. "name" : "comment",
  41. "parent" : "blog2"
  42. }
  43. }
  44. }
  45. ]

4.3 Has Child 查询,返回父文档

  1. # Has Child 查询,返回父文档
  2. POST my_blogs/_search
  3. {
  4. "query": {
  5. "has_child": {
  6. "type": "comment",
  7. "query" : {
  8. "match": {
  9. "username" : "Jack"
  10. }
  11. }
  12. }
  13. }
  14. }
  15. #####返回结果部分内容
  16. "hits" : [
  17. {
  18. "_index" : "my_blogs",
  19. "_type" : "_doc",
  20. "_id" : "blog1",
  21. "_score" : 1.0,
  22. "_source" : {
  23. "title" : "Learning Elasticsearch",
  24. "content" : "learning ELK @ geektime",
  25. "blog_comments_relation" : {
  26. "name" : "blog"
  27. }
  28. }
  29. },
  30. {
  31. "_index" : "my_blogs",
  32. "_type" : "_doc",
  33. "_id" : "blog2",
  34. "_score" : 1.0,
  35. "_source" : {
  36. "title" : "Learning Hadoop",
  37. "content" : "learning Hadoop",
  38. "blog_comments_relation" : {
  39. "name" : "blog"
  40. }
  41. }
  42. }
  43. ]

4.4 Has Parent 查询,返回相关的子文档

# Has Parent 查询,返回相关的子文档
POST my_blogs/_search
{
  "query": {
    "has_parent": {
      "parent_type": "blog",
      "query" : {
                "match": {
                    "title" : "Learning Hadoop"
                }
            }
    }
  }
}
#####返回结果部分内容
"hits" : [
      {
        "_index" : "my_blogs",
        "_type" : "_doc",
        "_id" : "comment2",
        "_score" : 1.0,
        "_routing" : "blog2",
        "_source" : {
          "comment" : "I like Hadoop!!!!!",
          "username" : "Jack",
          "blog_comments_relation" : {
            "name" : "comment",
            "parent" : "blog2"
          }
        }
      },
      {
        "_index" : "my_blogs",
        "_type" : "_doc",
        "_id" : "comment3",
        "_score" : 1.0,
        "_routing" : "blog2",
        "_source" : {
          "comment" : "Hello Hadoop",
          "username" : "Bob",
          "blog_comments_relation" : {
            "name" : "comment",
            "parent" : "blog2"
          }
        }
      }
    ]

5. 访问子文档

#通过ID ,访问不到子文档
GET my_blogs/_doc/comment3
#####找不到子文档
{
  "_index" : "my_blogs",
  "_type" : "_doc",
  "_id" : "comment3",
  "found" : false
}

#通过ID和routing ,访问子文档
GET my_blogs/_doc/comment3?routing=blog2
######返回结果
{
  "_index" : "my_blogs",
  "_type" : "_doc",
  "_id" : "comment3",
  "_version" : 1,
  "_seq_no" : 4,
  "_primary_term" : 1,
  "_routing" : "blog2",
  "found" : true,
  "_source" : {
    "comment" : "Hello Hadoop",
    "username" : "Bob",
    "blog_comments_relation" : {
      "name" : "comment",
      "parent" : "blog2"
    }
  }
}

6. 更新子文档

#更新子文档,Index方式全量替换修改document
PUT my_blogs/_doc/comment3?routing=blog2
{
    "comment": "Hello Hadoop??",
    "blog_comments_relation": {
      "name": "comment",
      "parent": "blog2"
    }
}
#更新子文档,partial update方式修改document
POST my_blogs/_update/comment3?routing=blog2
{
  "doc":{
    "comment":"Hello Hadoop==="
  }
}
######返回结果
{
  "_index" : "my_blogs",
  "_type" : "_doc",
  "_id" : "comment3",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 5,
  "_primary_term" : 1
}