原生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() {
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM