原生java api操作ES数据库

原生java api操作ES数据库

该部分也只写了一点点,后面有更简单的做法,就没写完

有需要再继续写吧...........参考一下就好了

@SpringBootTest
class JavaEsApplicationTests {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    /**
     * ES索引数据库,提供RestAPI
     * POST 创建
     * PUT 修改
     * DELETE 删除
     * GET 查询
     */
    //创建索引库
    @Test
    void creteIndex() throws IOException {
        //先发送一个创建索引库的请求,test是索引库的名字
        CreateIndexRequest request = new CreateIndexRequest("test");
        //通过核心对象创建索引库
        CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
        //ACK 确认
        System.out.println(response.isAcknowledged());
    }

    //判断索引库是否存在
    @Test
    void isExists() throws IOException {
        GetIndexRequest test = new GetIndexRequest("test");
        boolean exists = restHighLevelClient.indices().exists(test, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

    //删除索引库
    @Test
    void deleteIndex() throws IOException {
        //发送一个删除索引库的请求,test是索引库的名字
        DeleteIndexRequest request = new DeleteIndexRequest("test");
        //通过核心对象删除索引库
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }

    /**
     * POST /user/stu/1
     * {
     *     "uid":1,
     *     "uname":"张三",
     *     "upwd":"123456"
     * }
     */
    //针对文档做增删查改操作
    //增加数据
    @Test
    void insertData() throws IOException {
        //先创建一个User对象
        User user = new User(3, "王五", "123456");
        //创建IndexRequest请求的对象,并指定索引库test
        IndexRequest request = new IndexRequest("test");
        //设置类型
        //6.8.7版本的ES,如果不指定文档类型,那么汇报错:org.elasticsearch.action.ActionRequestValidationException: Validation Failed: 1: type is missing;
        request.type("std");
        //设置id值,如果不指定,则默认给一个UUID
        request.id("2");
        //设置文档数据源,就是保存的数据,数据格式为JSON
        //需要导入fastjson包
        request.source(JSON.toJSONString(user),XContentType.JSON);
        //如果出现:java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection http-outgoing-0 [ACTIVE]
        //如果还是不行就重启ElasticSearch,就解决了
        request.timeout(TimeValue.timeValueSeconds(60));
        //开始插入数据
        IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        System.out.println(index.status().getStatus()); //查看状态
        System.out.println(index.status().name()); //CREATE
    }

    //更新数文档数据
    @Test
    void updateData() throws IOException {
        //指定要修改的索引库,类型和id
        UpdateRequest request = new UpdateRequest("test","std","2");
        //设置数据
        /**
         * 我的ES版本的是6.8.7
         * 原始:uid:3,uname:王五,wpwd:123456
         * (1)只设置user.setUname("赵柳"); ==> 结果:uid:0,uname:赵柳,wpwd:123456
         * (2)只设置user.setUname("赵柳");user.setUpwd("79856"); ==> 结果:uid:0,uname:赵柳,wpwd:79856
         * (3)只设置user.setUpwd("111111"); ==> 结果:uid:0,uname:王五,wpwd:111111
         */
        User user = new User();
        user.setUpwd("111111");
        System.out.println(user);
        //转化为JSON格式的数据
        request.doc(JSON.toJSONString(user),XContentType.JSON);
        //更新数据
        restHighLevelClient.update(request,RequestOptions.DEFAULT);
    }

    //删除数据
    @Test
    void deleteData() throws IOException {
        DeleteRequest request = new DeleteRequest("test");
        request.type("std");
        request.id("2");
        DeleteResponse delete = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.status().name());
    }

    //但条件查询+分页
    @Test
    void search() throws IOException {
        String keywords = "";
        SearchRequest searchRequest = new SearchRequest("test");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        MatchAllQueryBuilder query = QueryBuilders.matchAllQuery();
        searchSourceBuilder.query(query);
        searchSourceBuilder.from(0).size(2);
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHit[] hits = search.getHits().getHits();
//        for (SearchHit )
    }

    @Test
    void contextLoads() {
    }

}

 

posted @ 2020-04-30 17:09  itch  阅读(1455)  评论(0编辑  收藏  举报