ElasticSearch Java API之文档操作

文档Document简单介绍

被索引的一条数据,索引的基本信息单元,以JSON格式来表示。

比如:你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示, JSON数据适合互联网数据交互。

在一个 index/type 里面,你可以存储任意多的文档。

文档对象

新建一个User类,好插入数据到ElasticSearch 中

@Data
public class User {
    private String name;
    private int age;
    private String sex;
}

因为使用了lombok的@Data注解来自动生成setter/getter、equals、canEqual、hashCode、toString方法,所以我们要在pom.xml文件中引入如下依赖

 <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.22</version>
     <scope>provided</scope>
 </dependency>

插入文档

static void insertDocument(RestHighLevelClient client) throws JsonProcessingException {

    // 新增文档 - 请求对象
    IndexRequest request = new IndexRequest();
    // 设置索引及唯一性标识
    request.index("userxt").id("1");

    // 创建数据对象
    User user = new User();
    user.setName("xt");
    user.setAge(24);
    user.setSex("男");

    ObjectMapper objectMapper = new ObjectMapper();
    //可能会抛出JsonProcessingException异常
    String productJson = objectMapper.writeValueAsString(user);

    // 添加文档数据,数据格式为 JSON 格式
    request.source(productJson, XContentType.JSON);
    // 客户端发送请求,获取响应对象
    IndexResponse response = null;
    try {
        response = client.index(request, RequestOptions.DEFAULT);
    } catch (IOException e) {
        e.printStackTrace();
    }
    //3.打印结果信息
    System.out.println("_index:" + response.getIndex());
    System.out.println("_id:" + response.getId());
    System.out.println("_result:" + response.getResult());
}

调用结果
在这里插入图片描述
ElasticSearch Head 插件可以看见插入到指定索引的数据
在这里插入图片描述

修改文档

static void alterDocument(RestHighLevelClient client) throws IOException {
    // 修改文档 - 请求对象
    UpdateRequest request = new UpdateRequest();
    // 配置修改参数
    request.index("userxt").id("1");
    // 设置请求体,对数据进行修改
    request.doc(XContentType.JSON, "age", 20);
    // 客户端发送请求,获取响应对象  抛出IOException
    UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
    System.out.println("_index:" + response.getIndex());
    System.out.println("_id:" + response.getId());
    System.out.println("_result:" + response.getResult());
}

调用结果
在这里插入图片描述
ElasticSearch Head 插件显示
在这里插入图片描述

查询文档

static void queryDocument(RestHighLevelClient client){
    //1.创建请求对象
    GetRequest request = new GetRequest().index("userxt").id("1");
    //2.客户端发送请求,获取响应对象
    GetResponse response = null;
    try {
        response = client.get(request, RequestOptions.DEFAULT);
    } catch (IOException e) {
        e.printStackTrace();
    }
    //3.打印结果信息
    System.out.println("_index:" + response.getIndex());
    System.out.println("_type:" + response.getType());
    System.out.println("_id:" + response.getId());
    System.out.println("_source:" + response.getSourceAsString());
}

在这里插入图片描述

删除文档

static void deleteDocument(RestHighLevelClient client) throws IOException {
    //创建请求对象
    DeleteRequest request = new DeleteRequest().index("userxt").id("1");
    //客户端发送请求,获取响应对象 抛出IOException
    DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
    //打印信息
    System.out.println(response.toString());
}

在这里插入图片描述
ElasticSearch Head 插件显示
在这里插入图片描述

批量插入文档

static void batchInsertDocument(RestHighLevelClient client) throws IOException {
    //创建批量新增请求对象
    BulkRequest request = new BulkRequest();
    request.add(new
            IndexRequest().index("userxt").id("2").source(XContentType.JSON, "name",
            "java"));
    request.add(new
            IndexRequest().index("user").id("3").source(XContentType.JSON, "name",
            "python"));
    request.add(new
            IndexRequest().index("user").id("4").source(XContentType.JSON, "name",
            "go"));
    //客户端发送请求,获取响应对象
    BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
    //打印结果信息
    System.out.println("took:" + responses.getTook());
    System.out.println("items:" + responses.getItems());
}

在这里插入图片描述
ElasticSearch Head 插件显示
在这里插入图片描述

批量删除文档

 static void batchDeleteDocument(RestHighLevelClient client) throws IOException {
     //创建批量删除请求对象
     BulkRequest request = new BulkRequest();
     request.add(new DeleteRequest().index("userxt").id("2"));
     request.add(new DeleteRequest().index("userxt").id("3"));
     request.add(new DeleteRequest().index("userxt").id("4"));
     //客户端发送请求,获取响应对象
     BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
     //打印结果信息
     System.out.println("took:" + responses.getTook());
     System.out.println("items:" + responses.getItems());
 }

在这里插入图片描述
ElasticSearch Head 插件显示
在这里插入图片描述

全部代码

//对elasticsearch的文档进行一系列操作
public class DocumentOperation {

    public static void main(String[] args) throws IOException {

        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials("xt", "xt"));


        RestClientBuilder restClientBuilder = RestClient.builder(
                new HttpHost("IP", 9200,"http"));

        // 认证和线程数
        restClientBuilder.setHttpClientConfigCallback(httpClientBuilder -> {
            httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
            int threadCount = 10;
            httpClientBuilder.setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(threadCount).build());

            return httpClientBuilder;
        });

        // 超时超时设置
        restClientBuilder.setRequestConfigCallback(requestConfigCallback -> {
            requestConfigCallback.setConnectTimeout(10000); //单位ms
            requestConfigCallback.setSocketTimeout(10000);
            return requestConfigCallback;
        });


        // 创建客户端对象   虽然已经被弃用,但是了解基本使用还是没有问题  里面封装了RestClient
        RestHighLevelClient client = new RestHighLevelClient(restClientBuilder);

        System.out.println(client);
        //插入文档
        insertDocument(client);
        //修改文档
        alterDocument(client);
        //查询文档
        queryDocument(client);
        //删除文档
        deleteDocument(client);
        // 批量插入文档
        batchInsertDocument(client);
        // 批量删除文档
        batchDeleteDocument(client);


        // 关闭客户端连接
        client.close();

    }


    static void insertDocument(RestHighLevelClient client) throws JsonProcessingException {

        // 新增文档 - 请求对象
        IndexRequest request = new IndexRequest();
        // 设置索引及唯一性标识
        request.index("userxt").id("1");

        // 创建数据对象
        User user = new User();
        user.setName("xt");
        user.setAge(24);
        user.setSex("男");

        ObjectMapper objectMapper = new ObjectMapper();
        //可能会抛出JsonProcessingException异常
        String productJson = objectMapper.writeValueAsString(user);

        // 添加文档数据,数据格式为 JSON 格式
        request.source(productJson, XContentType.JSON);
        // 客户端发送请求,获取响应对象
        IndexResponse response = null;
        try {
            response = client.index(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //3.打印结果信息
        System.out.println("_index:" + response.getIndex());
        System.out.println("_id:" + response.getId());
        System.out.println("_result:" + response.getResult());
    }


    static void alterDocument(RestHighLevelClient client) throws IOException {
        // 修改文档 - 请求对象
        UpdateRequest request = new UpdateRequest();
        // 配置修改参数
        request.index("userxt").id("1");
        // 设置请求体,对数据进行修改
        request.doc(XContentType.JSON, "age", 20);
        // 客户端发送请求,获取响应对象  抛出IOException
        UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
        System.out.println("_index:" + response.getIndex());
        System.out.println("_id:" + response.getId());
        System.out.println("_result:" + response.getResult());
    }

    static void queryDocument(RestHighLevelClient client){
        //1.创建请求对象
        GetRequest request = new GetRequest().index("userxt").id("1");
        //2.客户端发送请求,获取响应对象
        GetResponse response = null;
        try {
            response = client.get(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //3.打印结果信息
        System.out.println("_index:" + response.getIndex());
        System.out.println("_type:" + response.getType());
        System.out.println("_id:" + response.getId());
        System.out.println("_source:" + response.getSourceAsString());
    }

    static void deleteDocument(RestHighLevelClient client) throws IOException {
        //创建请求对象
        DeleteRequest request = new DeleteRequest().index("userxt").id("1");
        //客户端发送请求,获取响应对象 抛出IOException
        DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
        //打印信息
        System.out.println(response.toString());
    }


    static void batchInsertDocument(RestHighLevelClient client) throws IOException {
        //创建批量新增请求对象
        BulkRequest request = new BulkRequest();
        request.add(new
                IndexRequest().index("userxt").id("2").source(XContentType.JSON, "name",
                "java"));
        request.add(new
                IndexRequest().index("userxt").id("3").source(XContentType.JSON, "name",
                "python"));
        request.add(new
                IndexRequest().index("userxt").id("4").source(XContentType.JSON, "name",
                "go"));
        //客户端发送请求,获取响应对象
        BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
        //打印结果信息
        System.out.println("took:" + responses.getTook());
        System.out.println("items:" + responses.getItems());
    }


    static void batchDeleteDocument(RestHighLevelClient client) throws IOException {
        //创建批量删除请求对象
        BulkRequest request = new BulkRequest();
        request.add(new DeleteRequest().index("userxt").id("2"));
        request.add(new DeleteRequest().index("userxt").id("3"));
        request.add(new DeleteRequest().index("userxt").id("4"));
        //客户端发送请求,获取响应对象
        BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
        //打印结果信息
        System.out.println("took:" + responses.getTook());
        System.out.println("items:" + responses.getItems());
    }
}

(写博客主要是对自己学习的归纳整理,资料大部分来源于书籍、网络资料、官方文档和自己的实践,整理的不足和错误之处,请大家评论区批评指正。同时感谢广大博主和广大作者辛苦整理出来的资源和分享的知识。)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值