日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Java Low Level REST Client

Java Low Level REST Client是Elasticsearch官方提供的低級(jí)別REST客戶端,其API不負(fù)責(zé)數(shù)據(jù)的編碼與解碼。Lindorm搜索引擎兼容Elasticsearch 7.10及更早版本的功能,如果您想要自定義請(qǐng)求和響應(yīng)處理方式,可以通過(guò)Java Low Level REST Client連接并使用搜索引擎。

前提條件

  • 已安裝Java環(huán)境,要求安裝JDK 1.8及以上版本。

  • 已開(kāi)通搜索引擎。如何開(kāi)通,請(qǐng)參見(jiàn)開(kāi)通指南

  • 已將客戶端IP地址添加至Lindorm白名單,具體操作請(qǐng)參見(jiàn)設(shè)置白名單

操作步驟

  1. 安裝Low Level Rest Client。以Maven項(xiàng)目為例,在pom.xml文件的dependencies中添加依賴項(xiàng)。示例代碼如下:

    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-client</artifactId>
      <version>7.10.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.8.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.7</version>
    </dependency>
  2. 配置連接參數(shù)。

    //Lindorm搜索引擎的Elasticsearch兼容地址
    String search_url = "ld-t4n5668xk31ui****-proxy-search-public.lindorm.rds.aliyuncs.com";
    int search_port = 30070;
    
    // 配置用戶名密碼
    String username = "user";
    String password = "test";
    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
    RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(search_url, search_port));
    restClientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
      @Override
      public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
      }
    });

    參數(shù)說(shuō)明

    參數(shù)

    說(shuō)明

    search_url

    Lindorm搜索引擎的Elasticsearch兼容地址。如何獲取,請(qǐng)參見(jiàn)查看連接地址

    重要
    • 如果應(yīng)用部署在ECS實(shí)例,建議您通過(guò)專有網(wǎng)絡(luò)訪問(wèn)Lindorm實(shí)例,可獲得更高的安全性和更低的網(wǎng)絡(luò)延遲。

    • 如果應(yīng)用部署在本地,在通過(guò)公網(wǎng)連接Lindorm實(shí)例前,需在控制臺(tái)開(kāi)通公網(wǎng)地址。開(kāi)通方式:在控制臺(tái)的左側(cè)導(dǎo)航欄,選擇數(shù)據(jù)庫(kù)連接,單擊搜索引擎頁(yè)簽,在頁(yè)簽右上角單擊開(kāi)通公網(wǎng)地址

    • 通過(guò)專有網(wǎng)絡(luò)訪問(wèn)Lindorm實(shí)例,search_url請(qǐng)?zhí)顚慐lasticsearch兼容地址對(duì)應(yīng)的專有網(wǎng)絡(luò)地址。通過(guò)公網(wǎng)訪問(wèn)Lindorm實(shí)例,search_url請(qǐng)?zhí)顚慐lasticsearch兼容地址對(duì)應(yīng)的公網(wǎng)地址。

    search_port

    Lindorm搜索引擎Elasticsearch兼容的端口,固定為30070。

    username

    訪問(wèn)搜索引擎的用戶名和密碼。

    默認(rèn)用戶名和密碼的獲取方式:在控制臺(tái)的左側(cè)導(dǎo)航欄,選擇數(shù)據(jù)庫(kù)連接,單擊搜索引擎頁(yè)簽,在搜索引擎頁(yè)簽可獲取。

    password

  3. 使用Java Low Level REST Client對(duì)象訪問(wèn)搜索引擎。

    示例代碼分為以下幾部分:

    • 創(chuàng)建搜索索引:創(chuàng)建搜索索引lindorm_index。

    • 數(shù)據(jù)寫入:使用批量數(shù)據(jù)寫入的方式,寫入5000條文檔。

    • 數(shù)據(jù)查詢:刷新請(qǐng)求,強(qiáng)制寫入的數(shù)據(jù)可見(jiàn)。執(zhí)行兩個(gè)請(qǐng)求,分別查詢索引中的全部文檔和ID為特定值的文檔。

    • 數(shù)據(jù)刪除:刪除ID為test的文檔,并刪除索引lindorm_index。

    try (RestClient restClient = restClientBuilder.build()) {
      String indexName = "lindorm_index";
    
      // 創(chuàng)建索引
      Request indexRequest = new Request("PUT", "/" + indexName);
      indexRequest.setJsonEntity("{" +
        "  \"settings\":{" +
        "    \"index.number_of_shards\": 1" +
        "  }," +
        "  \"mappings\":{" +
        "    \"properties\":{" +
        "      \"name\":{" +
        "        \"type\":\"text\"" +
        "      }" +
        "    }" +
        "  }" +
        "}");
      Response response = restClient.performRequest(indexRequest);
      String responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);
    
      // 批量寫入數(shù)據(jù)
      Random random = new Random();
      Request bulkRequest = new Request("POST", "/_bulk");
      StringBuilder bulkJsonBuilder = new StringBuilder();
      for (int i = 0; i < 5000; i++) {
        // 請(qǐng)將field和value替換為實(shí)際業(yè)務(wù)字段與值
        bulkJsonBuilder.append("{\"index\":{\"_index\":\"").append(indexName).append("\",\"_id\":\"").append(i).append("\"}}").append("\n");
        String value = random.nextInt() + "";
        bulkJsonBuilder.append("{\"field1\":\"").append(value).append("\",\"field2\":\"").append(value).append("\"}").append("\n");
      }
      bulkRequest.setJsonEntity(bulkJsonBuilder.toString());
      response = restClient.performRequest(bulkRequest);
    
      // 發(fā)送刷新請(qǐng)求,強(qiáng)制已寫數(shù)據(jù)可見(jiàn)
      response = restClient.performRequest(new Request("POST", "/" + indexName + "/_refresh"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);
    
      // 查詢索引中所有數(shù)據(jù),默認(rèn)最多返回10條查詢結(jié)果
      response = restClient.performRequest(new Request("GET", "/" + indexName + "/_search"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);
    
      // 查詢索引中文檔id為"0"的數(shù)據(jù)
      response = restClient.performRequest(new Request("GET", "/" + indexName + "/_doc/0"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);
    
      // 刪除索引
      response = restClient.performRequest(new Request("DELETE", "/" + indexName));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);
    
    } catch (Exception e) {
      System.out.println("msg: " + e.getMessage());
    }

完整示例

完整示例代碼如下:

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;

import org.apache.http.util.EntityUtils;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;

import java.util.Random;

public class RestLClientTest {
  public static void main(String[] args) {
    // Lindorm搜索引擎的Elasticsearch兼容地址
    String search_url = "ld-t4n5668xk31ui****-proxy-search-public.lindorm.rds.aliyuncs.com";
    int search_port = 30070;

    // 配置用戶名密碼
    String username = "user";
    String password = "test";

    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
    RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(search_url, search_port));
    restClientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
      @Override
      public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
      }
    });

    try (RestClient restClient = restClientBuilder.build()) {
      String indexName = "lindorm_index";

      // 創(chuàng)建索引
      Request indexRequest = new Request("PUT", "/" + indexName);
      indexRequest.setJsonEntity("{" +
        "  \"settings\":{" +
        "    \"index.number_of_shards\": 1" +
        "  }," +
        "  \"mappings\":{" +
        "    \"properties\":{" +
        "      \"name\":{" +
        "        \"type\":\"text\"" +
        "      }" +
        "    }" +
        "  }" +
        "}");
      Response response = restClient.performRequest(indexRequest);
      String responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // 批量寫入數(shù)據(jù)
      Random random = new Random();
      Request bulkRequest = new Request("POST", "/_bulk");
      StringBuilder bulkJsonBuilder = new StringBuilder();
      for (int i = 0; i < 5000; i++) {
        // 請(qǐng)將field和value替換為實(shí)際業(yè)務(wù)字段與值
        bulkJsonBuilder.append("{\"index\":{\"_index\":\"").append(indexName).append("\",\"_id\":\"").append(i).append("\"}}").append("\n");
        String value = random.nextInt() + "";
        bulkJsonBuilder.append("{\"field1\":\"").append(value).append("\",\"field2\":\"").append(value).append("\"}").append("\n");
      }
      bulkRequest.setJsonEntity(bulkJsonBuilder.toString());
      response = restClient.performRequest(bulkRequest);

      // 發(fā)送刷新請(qǐng)求,強(qiáng)制已寫數(shù)據(jù)可見(jiàn)
      response = restClient.performRequest(new Request("POST", "/" + indexName + "/_refresh"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // 查詢索引中所有數(shù)據(jù),默認(rèn)最多返回10條查詢結(jié)果
      response = restClient.performRequest(new Request("GET", "/" + indexName + "/_search"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // 查詢索引中文檔id為"0"的數(shù)據(jù)
      response = restClient.performRequest(new Request("GET", "/" + indexName + "/_doc/0"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // 刪除索引
      response = restClient.performRequest(new Request("DELETE", "/" + indexName));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

    } catch (Exception e) {
      System.out.println("msg: " + e.getMessage());
    }
  }
}

執(zhí)行成功后將返回如下結(jié)果:

responseBody = {"acknowledged":true,"shards_acknowledged":true,"index":"lindorm_index"}
responseBody = {"_shards":{"total":1,"successful":1,"failed":0}}
responseBody = {"took":6,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":5000,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"lindorm_index","_id":"0","_score":1.0,"_source":{"field1":"2127821774","field2":"2127821774"}},{"_index":"lindorm_index","_id":"1","_score":1.0,"_source":{"field1":"1820331840","field2":"1820331840"}},{"_index":"lindorm_index","_id":"2","_score":1.0,"_source":{"field1":"-388903172","field2":"-388903172"}},{"_index":"lindorm_index","_id":"3","_score":1.0,"_source":{"field1":"-68048869","field2":"-68048869"}},{"_index":"lindorm_index","_id":"4","_score":1.0,"_source":{"field1":"1865955199","field2":"1865955199"}},{"_index":"lindorm_index","_id":"5","_score":1.0,"_source":{"field1":"1088273523","field2":"1088273523"}},{"_index":"lindorm_index","_id":"6","_score":1.0,"_source":{"field1":"-1529281106","field2":"-1529281106"}},{"_index":"lindorm_index","_id":"7","_score":1.0,"_source":{"field1":"-1185412160","field2":"-1185412160"}},{"_index":"lindorm_index","_id":"8","_score":1.0,"_source":{"field1":"-1243760053","field2":"-1243760053"}},{"_index":"lindorm_index","_id":"9","_score":1.0,"_source":{"field1":"1066058716","field2":"1066058716"}}]}}
responseBody = {"_index":"lindorm_index","_id":"0","_version":1,"_seq_no":0,"_primary_term":1,"found":true,"_source":{"field1":"2127821774","field2":"2127821774"}}
responseBody = {"acknowledged":true}