springboot2.1.3集成elasticsearch, 父子结构 join建立

本文档详细介绍了如何在Elasticsearch中创建并操作父子文档。首先,展示了如何在服务器上建立父子表结构,接着定义了父实体和子实体,并提供了保存父文档和子文档的示例代码。最后,演示了一条完整的父子数据内容,以及如何通过父ID查询子文档。适用于理解Elasticsearch的join类型及数据存储操作。
摘要由CSDN通过智能技术生成

版本

spring-boot-starter-data-elasticsearch: 2.1.3 RELEASE
es服务版本:elasticsearch-6.7.0

步骤

1、 测试表名

sys_object

2、 先在服务器建立父子表结构

在这里插入图片描述

{
  "mappings": {
    "_doc": {
      "properties": {
        "type": { 
          "type": "join",
          "relations": {
            "parent": "child" 
          }
        }
      }
    }
  }
}

在这里插入图片描述

查看表结构应该是这样的。

3、 建立父实体

@Data
@Document(indexName = "sys_object", type="_doc")
public class SysObjectModel {

    @Id
    @GeneratedValue
    private String id;

    private String projectId;

    @Field(type = FieldType.Auto)
    private JSONObject type;

}
public interface ISysObjectEsService extends org.springframework.data.repository.Repository<SysObjectModel, String>, CrudRepository<SysObjectModel, String> {

}

4、 建立子实体

@Data
@Document(indexName = "sys_object", type="_doc")
public class SysObject3DChildModel {

    @Id
    @GeneratedValue
    private String id;

    @Field(type = FieldType.Auto)
    private JSONObject type;

    private String objectId;

    private String docId;

    private String nodeId;

    private String projectId;
}
public interface ISysObject3DChildEsService extends org.springframework.data.repository.Repository<SysObject3DChildModel, String>, CrudRepository<SysObject3DChildModel, String> {
}

这里父子索引名称相同 因为是同一张表。

5、保存数据测试

注意这里的type的值设置

5.1 保存父

String parentId = UUID.randomUUID().toString();
        SysObjectModel sysObjectModel = new SysObjectModel();
        JSONObject parentType = new JSONObject();
        parentType.put("name", "parent");
        sysObjectModel.setType(parentType);
        sysObjectModel.setId(parentId);
        sysObjectEsService.save(sysObjectModel);

5.2 保存子

SysObject3DChildModel sysObject3DChildModel = new SysObject3DChildModel();
        sysObject3DChildModel.setObjectId(parentId);
        sysObject3DChildModel.setId(UUID.randomUUID().toString());
        JSONObject childType = new JSONObject();
        childType.put("name", "child");
        childType.put("parent", parentId);
        sysObject3DChildModel.setType(childType);
        sysObject3DChildModel.setObjectId(parentId);
        sysObject3DChildService.save(sysObject3DChildModel);

其中子的service的save逻辑是

public void save(SysObject3DChildModel sysObject3DChildModel) {
        String objectId = sysObject3DChildModel.getObjectId();
        Request request = new Request("PUT",
                String.format("/sys_object/_doc/%s?routing=%s&refresh",
                        sysObject3DChildModel.getId(), objectId));
        String putSql = JSON.toJSONString(sysObject3DChildModel);
        HttpEntity entity = new NStringEntity(putSql, ContentType.APPLICATION_JSON);
        request.setEntity(entity);
        try {
            this.client.performRequest(request);
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        }
    }

可参考官方文档

6 一条父子数据内容


在这里插入图片描述


在这里插入图片描述

通过父ID查询子
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值