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

High Level REST Client(7.x)

本文基于Java High Level REST Client 7.x版本,為您介紹Elasticsearch Java API的用法。

準備工作

  • 創建阿里云Elasticsearch實例,版本要求大于等于Java High Level REST Client的版本。

    本文創建一個7.x版本的實例,創建方法請參見創建阿里云Elasticsearch實例

    說明

    High Level Client能夠向上兼容,例如7.10版本的Java High Level REST Client能確保與7.10及以上版本的Elasticsearch集群通信。為了保證最大程度地使用新版客戶端的特性,推薦High Level Client版本與集群版本一致。

  • 開啟阿里云Elasticsearch實例的自動創建索引功能。

    具體操作步驟請參見配置YML參數

    如果未開啟會提示如下報錯。報錯

  • 配置阿里云Elasticsearch實例的白名單,確保網絡互通。

    • 如果運行Java代碼的服務器在公網環境下,可通過阿里云Elasticsearch實例的公網地址進行連通。連通前,需要開啟阿里云Elasticsearch實例的公網地址,并修改公網地址訪問白名單,將服務器的公網IP地址加入白名單中。具體操作步驟請參見配置實例公網或私網訪問白名單

      重要
      • 如果您的客戶端處在家庭網絡或公司局域網中,您需要將局域網的公網出口IP地址添加到白名單中,而非客戶端機器的內網地址。建議您通過瀏覽器訪問cip.cc獲取您當前使用的公網IP地址。

      • 您也可以將白名單配置為0.0.0.0/0,允許所有IPv4地址訪問阿里云Elasticsearch實例。此配置會導致實例完全暴露在公網中,增加安全風險,配置前請確認您是否可以接受這個風險。

      • 如果未配置白名單或白名單配置錯誤,系統會提示連接超時報錯(Timeout connecting)。

      • 如果您需要通過客戶端訪問Kibana節點,還需要配置Kibana的訪問白名單,詳細信息請參見配置Kibana公網或私網訪問白名單

    • 如果運行Java代碼的服務器與阿里云Elasticsearch實例在同一專有網絡VPC(Virtual Private Cloud)中,可通過阿里云Elasticsearch實例的私網地址進行連通。連通前,需要確保VPC私網訪問白名單(默認為0.0.0.0/0)中已添加了服務器的內網IP地址。

  • 安裝Java,要求JDK版本為1.8及以上。

  • 創建Java Maven工程,并將如下的pom依賴添加到Java工程的pom.xml文件中。

pom依賴

使用時,您需要將pom依賴中的7.x版本號替換為具體的版本號。

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.x</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.20.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.20.0</version>
</dependency>
重要

Log4j可能存在遠程代碼執行漏洞,詳細信息請參見漏洞公告 | Apache Log4j2遠程代碼執行漏洞

示例

單擊下載完整示例代碼

以下代碼使用Index API創建索引,使用Delete API刪除該索引,并演示了在JVM內存分配比較有限的客戶端環境中,通過調整ResponseConsumer配置,限制異步響應所占用的緩存的大小。

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.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class RestClientTest74 {

    private static final RequestOptions COMMON_OPTIONS;

    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();

        // 默認緩存限制為100MB,此處修改為30MB。
        builder.setHttpAsyncResponseConsumerFactory(
                new HttpAsyncResponseConsumerFactory
                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }

    public static void main(String[] args) {
        // 阿里云Elasticsearch集群需要basic auth驗證。
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        //訪問用戶名和密碼為您創建阿里云Elasticsearch實例時設置的用戶名和密碼,也是Kibana控制臺的登錄用戶名和密碼。
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("{訪問用戶名}", "{訪問密碼}"));

        // 通過builder創建rest client,配置http client的HttpClientConfigCallback。
        // 單擊所創建的Elasticsearch實例ID,在基本信息頁面獲取公網地址,即為ES集群地址。
        RestClientBuilder builder = RestClient.builder(new HttpHost("{ES集群地址}", 9200, "http"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });

        // RestHighLevelClient實例通過REST high-level client builder進行構造。
        RestHighLevelClient highClient = new RestHighLevelClient(builder);

        try {
            // 創建request。
            Map<String, Object> jsonMap = new HashMap<>();
            // field_01、field_02為字段名,value_01、value_02為對應的值。
            jsonMap.put("{field_01}", "{value_01}");
            jsonMap.put("{field_02}", "{value_02}");
            //index_name為索引名稱;type_name為類型名稱,7.0及以上版本必須為_doc;doc_id為文檔的id。
            IndexRequest indexRequest = new IndexRequest("{index_name}", "_doc", "{doc_id}").source(jsonMap);

            // 同步執行,并使用自定義RequestOptions(COMMON_OPTIONS)。
            IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS);

            long version = indexResponse.getVersion();

            System.out.println("Index document successfully! " + version);
            //index_name為索引名稱;type_name為類型名稱,7.0及以上版本必須為_doc;doc_id為文檔的id。與以上創建索引的名稱和id相同。
            DeleteRequest request = new DeleteRequest("{index_name}", "_doc", "{doc_id}");
            DeleteResponse deleteResponse = highClient.delete(request, COMMON_OPTIONS);

            System.out.println("Delete document successfully! \n" + deleteResponse.toString());

            highClient.close();

        } catch (IOException ioException) {
            // 異常處理。
        }
    }
}

以上示例代碼中帶{}的參數需要替換為您具體業務的參數,詳情請參見代碼注釋。

若為高并發場景,需要增加客戶端連接數,具體配置如下。

httpClientBuilder.setMaxConnTotal(500);
httpClientBuilder.setMaxConnPerRoute(300);

連接代碼示例:

String host = "127.0.0.1";
int port = 9200;
String username = "elastic";
String password = "passwd";
final int max_conn_total = 500;
final int max_conn_per_route = 300;

RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
  RestClient.builder(new HttpHost( host, 9200, "http")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
      httpClientBuilder.setMaxConnTotal(max_conn_total);
      httpClientBuilder.setMaxConnPerRoute(max_conn_per_route);
      return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
    }
  })
);

更多Java High Level REST Client的使用特性,請參見Java High Level REST Client官方文檔