前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java API 代码操作ElasticSearch7.6.1(2)

Java API 代码操作ElasticSearch7.6.1(2)

原创
作者头像
彼岸舞
修改2020-12-03 18:00:16
9610
修改2020-12-03 18:00:16
举报
文章被收录于专栏:java开发的那点事

添加FastJSON依赖

代码语言:javascript
复制
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.2.60</version>
</dependency>

关于文档的操作,干货走不停,基本项目开发中的API都在下面

代码语言:javascript
复制
package com.dance.danceesapi.test;

import com.alibaba.fastjson.JSON;
import com.dance.danceesapi.pojo.User;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;

/**
 * 关于文档的API的操作
 */
@SpringBootTest
public class TestDocument {

    @Autowired
    @Qualifier("restHighLevelClient")
    RestHighLevelClient restHighLevelClient;

    /**
     * 测试添加文档
     * @throws IOException
     */
    @Test
    void addDocument() throws IOException {

        // 创建文档对象
        User user = new User("彼岸舞111", 18);

        // 指定索引库
        IndexRequest flower = new IndexRequest("flower");

        // 设置参数 id 超时时间 和数据源
        flower.id("4").timeout(TimeValue.timeValueSeconds(5)).source(JSON.toJSONString(user), XContentType.JSON);

        // 执行请求
        IndexResponse index = restHighLevelClient.index(flower, RequestOptions.DEFAULT);

        System.out.println(index.toString());

        System.out.println(index.status());

    }

    /**
     * 测试文档是否存在
     * @throws IOException
     */
    @Test
    void existDocument() throws IOException {

        GetRequest flower = new GetRequest("flower", "1");

        boolean exists = restHighLevelClient.exists(flower, RequestOptions.DEFAULT);

        System.out.println(exists);
    }

    /**
     * 获取文档信息
     * @throws IOException
     */
    @Test
    void getDocument() throws IOException {

        GetRequest flower = new GetRequest("flower", "1");

        GetResponse documentFields = restHighLevelClient.get(flower, RequestOptions.DEFAULT);

        System.out.println(documentFields.getSourceAsString());
    }

    /**
     * 测试文档的更新
     * @throws IOException
     */
    @Test
    void updateDocument() throws IOException {

        User user = new User("彼岸草小姐姐",19);

        UpdateRequest flower = new UpdateRequest("flower","1");

        flower.timeout(TimeValue.timeValueSeconds(5));

        flower.doc(JSON.toJSONString(user),XContentType.JSON);

        UpdateResponse update = restHighLevelClient.update(flower, RequestOptions.DEFAULT);

        System.out.println(update);

        System.out.println(update.status());

    }

    /**
     * 测试文档的删除
     * @throws IOException
     */
    @Test
    void deleteDocument() throws IOException {

        DeleteRequest flower = new DeleteRequest("flower", "4");

        DeleteResponse delete = restHighLevelClient.delete(flower, RequestOptions.DEFAULT);

        System.out.println(delete);

        System.out.println(delete.status());

    }

    /**
     * 测试批量 增删改查都可以 只需要更换不同的Request就可以了
     * @throws IOException
     */
    @Test
    void batchDocument() throws IOException {

        BulkRequest flower = new BulkRequest();

        for (int i = 0; i < 100; i++) {
            int y = i + 4;
            User user = new User("测试" + y, y);
            flower.add(
                    new IndexRequest("flower")
                            .id(y+"")
                            .source(JSON.toJSONString(user),XContentType.JSON)
            );
        }

        BulkResponse bulk = restHighLevelClient.bulk(flower, RequestOptions.DEFAULT);

        System.out.println(bulk);

        System.out.println(bulk.status());

        // 返回false 代表没有失败
        System.out.println(bulk.hasFailures());

    }

    @Test
    void query() throws IOException {

        SearchRequest flower = new SearchRequest("flower");

        // 包含的字段
        String[] includes = new String[]{"name"};

        // 排除的字段
        String[] excludes = new String[]{"age"};

        // 构造搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

        // match匹配 字段
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "彼岸");

        // 加入条件
        sourceBuilder.query(matchQueryBuilder);

        sourceBuilder.fetchSource(new FetchSourceContext(true,includes,excludes));

        // 分页
        sourceBuilder.from(0);
        
        sourceBuilder.size(2);
        
        flower.source(sourceBuilder);

        SearchResponse search = restHighLevelClient.search(flower, RequestOptions.DEFAULT);

        System.out.println(search);

        System.out.println(search.getHits());

        for (SearchHit hit : search.getHits().getHits()) {
            System.out.println(hit.getSourceAsString());
        }

    }

}

作者:彼岸舞

时间:2020\09\11

内容关于:ElasticSearch

本文来源于网络,只做技术分享,一概不负任何责任

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档