【Elasticsearch教程1】 创建文档

发布于:2023-01-08 ⋅ 阅读:(499) ⋅ 点赞:(0)

版本约定

本系列博客ES版本如下:

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

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

创建文档API

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

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

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

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

1 PUT /<target>/_doc/<_id>

创建或覆盖指定id的文档

GET pigg_test/_search

PUT pigg_test/_doc/1
{
  "name": "亚瑟王",
  "age": 33
}

PUT pigg_test/_doc/1
{
  "name": "马超",
  "sex": 1
}

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

2 POST /<target>/_doc/

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

POST pigg_test/_doc
{
  "name": "吕布"
}

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

3 PUT /<target>/_create/<_id> & POST /<target>/_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) {

    }
}

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);
}

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);
}
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到