(父子结构)
前言
由于Elasticsearch没有表和表的join关系,所以设计出来一种可以文档与文档关联起来的方法,其中包括
1.普通内部对象; 2.嵌套结构; 3.父子结构。
==以下操作都是通过kibana操作==
1. 创建索引mapping
PUT test01
{
"mappings": {
"properties": {
"cust_num": {
"type": "text"
},
"parent_child": {
"type": "join",
"relations": {
"parent": "child"
}
}
}
}
}
解释: 1.提前在mapping中设定了一个field cust_name,type为text; 2.parent_child是父子文档关系的名字,可以自定义; 3.join 表示这个文档为父子关系; 4.relations:表示的是"父名": "子名",也可以自定义
2. 插入一条父文档
PUT test01/_doc/01
{
"cust_num": "张三",
"tag": [1,3,4],
"parent_child": {
"name": "parent"
}
}
因为我们在前面创建mapping的时候已经设置了relations,在设置relations的时候指定了父文档的名称为==parent==,所以我们这一条插入的是父文档。
3. 插入一条子文档
PUT test01/_doc/02?routing=01
{
"phone_tag": [2,5],
"parent_child": {
"name": "child",
"parent": "01"
}
}
解释: 文档id我们指定的为02,首先可以判断父文档和子文档是独立的文档,其次==routing== 是路由的意思,咱们这里指的是路由到父文档的id是01,这个id和下面的parent是一致的
4. 可解决的问题
1.需要将两条文档关联起来 2.查询的时候能查询到两条文档 3.单独更新a文档,或者b文档,不影响改变另一个文档的记录。
作者应用场景:同一个客户,要存储手机银行标签和电话银行标签,但是手机银行标签和电话银行标签都需要各自能独立维护