Elasticsearch Java REST Client 入門使用


簡介

Java REST Client 有兩種:

  • Java Low Level REST Client :用於Elasticsearch的官方低級客戶端。它允許通過http與Elasticsearch集群通信。將請求編排和響應反編排留給用戶自己處理。它兼容所有的Elasticsearch版本。
  • Java High Level REST Client :用於Elasticsearch的官方高級客戶端。它是基於低級客戶端的,它提供很多API,並負責請求的編排與響應的反編排。

注: 在 Elasticsearch 7.0 中不建議使用TransportClient,並且在8.0中會完全刪除TransportClient。因此,官方更建議我們用Java High Level REST Client,它執行HTTP請求,而不是序列號的
Java請求。

環境配置

  • Maven configuration

我這里使用的是7.2.0版本的Elasticsearch,說以對應使用7.2.0版本的REST Clien。

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.2.0</version>
</dependency>

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.2.0</version>
</dependency>
  • 初始化得到一個RestHighLevelClient實例
RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")
            ));

入門使用

  • 創建索引庫
public void testCreatIndex() throws IOException {
        //創建索引對象
        CreateIndexRequest createIndexRequest = new CreateIndexRequest("xc_course");
        //設置參數
        createIndexRequest.settings(Settings.builder().put("number_of_shards", "1").put("number_of_replicas", "0"));
        //指定映射
        createIndexRequest.mapping("{\n" +
                "  \"properties\": {\n" +
                "    \"name\": {\n" +
                "      \"type\": \"text\",\n" +
                "      \"analyzer\": \"ik_max_word\",\n" +
                "      \"search_analyzer\": \"ik_smart\"\n" +
                "    },\n" +
                "    \"description\": {\n" +
                "      \"type\": \"text\",\n" +
                "      \"analyzer\": \"ik_max_word\",\n" +
                "      \"search_analyzer\": \"ik_smart\"\n" +
                "    },\n" +
                "    \"studymodel\": {\n" +
                "      \"type\": \"keyword\"\n" +
                "    },\n" +
                "    \"price\": {\n" +
                "      \"type\": \"float\"\n" +
                "    },\n" +
                "    \"timestamp\": {\n" +
                "      \"type\": \"date\",\n" +
                "      \"format\": \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"\n" +
                "    }\n" +
                "  }\n" +
                "}", XContentType.JSON);
        //操作索引的客戶端
        IndicesClient indices = client.indices();
        //執行創建索引庫
        CreateIndexResponse createIndexResponse = indices.create(createIndexRequest, RequestOptions.DEFAULT);
        //得到響應
        boolean acknowledged = createIndexResponse.isAcknowledged();
        System.out.println(acknowledged);
    }
  • 添加文檔
    // 添加文檔
    @Test
    public void testIndex() throws IOException {
        //文檔內容
        //准備json數據
        Map<String, Object> jsonMap = new HashMap<>();
        jsonMap.put("name", "spring cloud實戰");
        jsonMap.put("description", "本課程主要從四個章節進行講解: 1.微服務架構入門 2.spring cloud 基礎入門 3.實戰Spring Boot 4.注冊中心eureka。");
        jsonMap.put("studymodel", "201001");
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        jsonMap.put("timestamp", dateFormat.format(new Date()));
        jsonMap.put("price", 5.6f);
        IndexRequest indexRequest = new IndexRequest("xc_course").id("1").source(jsonMap);
        client.index(indexRequest, RequestOptions.DEFAULT);
        client.close();

    }
  • 獲取文檔
// 搜索文檔
    @Test
    public void testGetDoc() throws IOException {
        //查詢請求對象

        GetRequest getRequest = new GetRequest(
                "xc_course",
                "1");

        GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
        //得到文檔的內容
        Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
        System.out.println(sourceAsMap);
    }
  • 刪除索引庫
// 刪除索引庫
    @Test
    public void testDeleteIndex() throws IOException {
        //刪除索引對象
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("xc_course");
        //操作索引的客戶端
        IndicesClient indices = client.indices();
        //執行刪除索引
        AcknowledgedResponse acknowledgedResponse = indices.delete(deleteIndexRequest, RequestOptions.DEFAULT);
        //得到響應
        boolean acknowledged = acknowledgedResponse.isAcknowledged();
        System.out.println(acknowledged);
    }

更多使用參考:[Java REST Client 官方文檔]: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html


免責聲明!

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



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