• Elasticsearch7教程(1) 创建文档


    版本约定

    本系列博客ES版本如下:

    • Elasticsearch 7.17.X
    • Spring Data Elasticsearch 4.4.X

    Elasticsearch下载地址
    Spring Data Elasticsearch 下载地址

    创建文档API

    ES创建文档可以通过如下4种API,它们看着类似,功能上少许不同。

    • PUT //_doc/<_id>
    • POST //_doc/
    • PUT //_create/<_id>
    • POST //_create/<_id>

    命令中表示一个索引(index)或者数据流(data stream)
    命令中_doc是固定写法,无需深究
    命令中_create表示创建一个新的文档,如果指定的<_id>文档已经存在,则返回失败
    注意:数据流的情况比较复杂,学习先以索引为主,熟练后再考虑数据流场景

    命令含义id已经存在数据流
    PUT //_doc/<_id>创建或覆盖指定id的文档覆盖,相当于先删后创建不支持
    POST //_doc/创建自动生成id的文档X支持
    PUT //_create/<_id>创建指定id的文档返回失败支持
    POST //_create/<_id>创建指定id的文档返回失败支持

    1 PUT //_doc/<_id>

    创建或覆盖指定id的文档

    GET pigg_test/_search
    
    PUT pigg_test/_doc/1
    {
      "name": "亚瑟王",
      "age": 33
    }
    
    PUT pigg_test/_doc/1
    {
      "name": "马超",
      "sex": 1
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果如下,可看出文档被覆盖了
    在这里插入图片描述

    2 POST //_doc/

    用POST插入一个文档,不指定ID,会给文档自动生成ID

    POST pigg_test/_doc
    {
      "name": "吕布"
    }
    
    • 1
    • 2
    • 3
    • 4

    运行结果如下,可看出新创建的文档的ID是自生成的一串乱码
    在这里插入图片描述

    3 PUT //_create/<_id> & POST //_create/<_id>

    这2个命令指定/_create/<_id>,说明当id已经存在时,会返回错误。
    在这里插入图片描述

    Java API

    1 Elasticsearch Java API

    在用ES原生Java API创建文档时,可以设置opType(DocWriteRequest.OpType.CREATE)来指定是Create文档的操作。

    这个opType默认值是OpType.INDEX。

    IndexRequest request = new IndexRequest("pigg_test")
            .id("1")
            .source("name", "亚瑟")
            .opType(DocWriteRequest.OpType.CREATE);//指定是create
    
    try {
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);
    } catch(ElasticsearchException e) {
        if (e.status() == RestStatus.CONFLICT) {
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2 Spring Data Elasticsearch

    当使用Spring Data Elasticsearch时,可以使用CrudRepository接口里的方法也可以使用DocumentOperations接口里的方法。

    1 CrudRepository接口

    @NoRepositoryBean
    public interface CrudRepository<T, ID> extends Repository<T, ID> {
        <S extends T> S save(S entity);
    
        <S extends T> Iterable<S> saveAll(Iterable<S> entities);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2 DocumentOperations接口

    public interface DocumentOperations {
        <T> T save(T entity);
    
        <T> T save(T entity, IndexCoordinates index);
    
        <T> Iterable<T> save(Iterable<T> entities);
    
        <T> Iterable<T> save(Iterable<T> entities, IndexCoordinates index);
    
        <T> Iterable<T> save(T... entities);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    JSR303和拦截器
    STM32的寄存器深度解析
    Day125.JUC:线程间通信(Conditon)、并发容器类(CopyOnWrite)、JUC强大辅助类、Callable
    zookeeper常用命令详解
    @FeignClient configuration参数配置
    UI遍历的初步尝试
    三维大场景管理-3Dtiles规范
    electron
    含文档+PPT+源码等]精品微信小程序ssm驾校教培服务系统小程序+后台管理系统|前后分离VUE[包运行成功]微信小程序项目源码Java毕业设计
    【高等数学】二.一元函数微分学
  • 原文地址:https://blog.csdn.net/winterking3/article/details/126461276