1. 设置Mapping
DELETE my_blogs# 设定 Parent/Child MappingPUT my_blogs{ "settings": { "number_of_shards": 2 }, "mappings": { "properties": { "blog_comments_relation": { "type": "join", "relations": { "blog": "comment" } }, "content": { "type": "text" }, "title": { "type": "keyword" } } }}
2. 索引父文档
#索引父文档PUT my_blogs/_doc/blog1{ "title":"Learning Elasticsearch", "content":"learning ELK @ geektime", "blog_comments_relation":{ "name":"blog" }}#索引父文档PUT my_blogs/_doc/blog2{ "title":"Learning Hadoop", "content":"learning Hadoop", "blog_comments_relation":{ "name":"blog" }}
3. 索引子文档
#索引子文档PUT my_blogs/_doc/comment1?routing=blog1{ "comment":"I am learning ELK", "username":"Jack", "blog_comments_relation":{ "name":"comment", "parent":"blog1" }}#索引子文档PUT my_blogs/_doc/comment2?routing=blog2{ "comment":"I like Hadoop!!!!!", "username":"Jack", "blog_comments_relation":{ "name":"comment", "parent":"blog2" }}#索引子文档PUT my_blogs/_doc/comment3?routing=blog2{ "comment":"Hello Hadoop", "username":"Bob", "blog_comments_relation":{ "name":"comment", "parent":"blog2" }}
4. Parent/Child所支持的查询
4.1 查询所有文档
# 查询所有文档POST my_blogs/_search{}#####返回结果部分内容,发现它们都是独立的文档"hits" : [ { "_index" : "my_blogs", "_type" : "_doc", "_id" : "blog1", "_score" : 1.0, "_source" : { "title" : "Learning Elasticsearch", "content" : "learning ELK @ geektime", "blog_comments_relation" : { "name" : "blog" } } }, { "_index" : "my_blogs", "_type" : "_doc", "_id" : "blog2", "_score" : 1.0, "_source" : { "title" : "Learning Hadoop", "content" : "learning Hadoop", "blog_comments_relation" : { "name" : "blog" } } }, { "_index" : "my_blogs", "_type" : "_doc", "_id" : "comment1", "_score" : 1.0, "_routing" : "blog1", "_source" : { "comment" : "I am learning ELK", "username" : "Jack", "blog_comments_relation" : { "name" : "comment", "parent" : "blog1" } } }, { "_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" } } } ]
4.2 根据父文档ID查看
#根据父文档ID查看,返回要查看的父文档GET my_blogs/_doc/blog2# Parent Id 查询,其下所属的子文档POST my_blogs/_search{ "query": { "parent_id": { "type": "comment", "id": "blog2" } }}#####返回结果的部分内容,返回父文档id对应下的子文档"hits" : [ { "_index" : "my_blogs", "_type" : "_doc", "_id" : "comment2", "_score" : 0.5389965, "_routing" : "blog2", "_source" : { "comment" : "I like Hadoop!!!!!", "username" : "Jack", "blog_comments_relation" : { "name" : "comment", "parent" : "blog2" } } }, { "_index" : "my_blogs", "_type" : "_doc", "_id" : "comment3", "_score" : 0.5389965, "_routing" : "blog2", "_source" : { "comment" : "Hello Hadoop", "username" : "Bob", "blog_comments_relation" : { "name" : "comment", "parent" : "blog2" } } } ]
4.3 Has Child 查询,返回父文档
# Has Child 查询,返回父文档POST my_blogs/_search{ "query": { "has_child": { "type": "comment", "query" : { "match": { "username" : "Jack" } } } }}#####返回结果部分内容"hits" : [ { "_index" : "my_blogs", "_type" : "_doc", "_id" : "blog1", "_score" : 1.0, "_source" : { "title" : "Learning Elasticsearch", "content" : "learning ELK @ geektime", "blog_comments_relation" : { "name" : "blog" } } }, { "_index" : "my_blogs", "_type" : "_doc", "_id" : "blog2", "_score" : 1.0, "_source" : { "title" : "Learning Hadoop", "content" : "learning Hadoop", "blog_comments_relation" : { "name" : "blog" } } } ]
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
}