Todos os produtos
Search
Central de documentação

Lindorm:Java low level REST client

Última atualização: Sep 14, 2026

O Java Low Level REST Client envia requisições HTTP brutas sem codificar ou decodificar o corpo da requisição ou da resposta, oferecendo controle direto sobre o tratamento das requisições. Use este cliente quando precisar se conectar ao LindormSearch (compatível com Elasticsearch 7.10 e versões anteriores) e quiser gerenciar a serialização manualmente.

Pré-requisitos

Antes de começar, verifique se os seguintes requisitos foram atendidos:

  • JDK 1.8 ou posterior instalado

  • LindormSearch ativado na instância do Lindorm. Consulte Activation guide

  • Endereço IP do cliente adicionado à lista de permissões da instância do Lindorm. Consulte Configure a whitelist

Instale o cliente

Adicione as dependências abaixo à seção dependencies do arquivo pom.xml ou do arquivo de build.

Maven:

<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>

Gradle:

dependencies {
  implementation 'org.elasticsearch.client:elasticsearch-rest-client:7.10.0'
  implementation 'org.apache.logging.log4j:log4j-core:2.8.2'
  implementation 'org.apache.logging.log4j:log4j-api:2.7'
}

Configure a conexão

Crie um RestClient com o endpoint e as credenciais do LindormSearch:

String search_url = "ld-t4n5668xk31ui****-proxy-search-public.lindorm.rds.aliyuncs.com";
int search_port = 30070;

// For demo purposes only. Do not hardcode credentials in production code.
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);
  }
});

Parâmetros:

Parâmetro

Descrição

search_url

Endpoint do LindormSearch para Elasticsearch. Para obter o endpoint, consulte View endpoints. Use o endpoint de Virtual Private Cloud (VPC) para aplicações executadas em uma instância ECS ou o endpoint de Internet para aplicações locais conectadas pela rede pública.

search_port

Porta do endpoint do LindormSearch. Valor fixo: 30070.

username

Nome de usuário do mecanismo de busca. Para obter as credenciais padrão, acesse o console do Lindorm, clique em Database Connections no painel de navegação à esquerda e selecione a aba Search Engine.

password

Senha do mecanismo de busca. Disponível no mesmo local do username.

Importante

Use uma conexão VPC para aplicações implantadas em uma instância ECS, pois ela oferece menor latência e maior segurança que a conexão de rede pública. Para se conectar pela rede pública, ative primeiro o endpoint público: no console do Lindorm, clique em Database Connections no painel de navegação à esquerda, selecione a aba Search Engine e clique em Enable Public Endpoint no canto superior direito.

Crie um índice

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

  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);
}

Uma resposta bem-sucedida tem o seguinte formato:

{"acknowledged":true,"shards_acknowledged":true,"index":"lindorm_index"}

Grave documentos em massa

Use a Bulk API para gravar vários documentos em uma única requisição. O exemplo a seguir grava 5.000 documentos no índice lindorm_index:

Random random = new Random();
Request bulkRequest = new Request("POST", "/_bulk");
StringBuilder bulkJsonBuilder = new StringBuilder();
for (int i = 0; i < 5000; i++) {
  // Replace field names and values with those from your application.
  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);

Após a gravação em massa, envie uma requisição de atualização para tornar os documentos visíveis na busca:

response = restClient.performRequest(new Request("POST", "/" + indexName + "/_refresh"));
responseBody = EntityUtils.toString(response.getEntity());
System.out.println("responseBody = " + responseBody);

Uma resposta de atualização bem-sucedida apresenta este formato:

{"_shards":{"total":1,"successful":1,"failed":0}}

Consulte documentos

Consulte todos os documentos do índice (retorna até 10 resultados por padrão):

response = restClient.performRequest(new Request("GET", "/" + indexName + "/_search"));
responseBody = EntityUtils.toString(response.getEntity());
System.out.println("responseBody = " + responseBody);

Consulte um documento por ID:

response = restClient.performRequest(new Request("GET", "/" + indexName + "/_doc/0"));
responseBody = EntityUtils.toString(response.getEntity());
System.out.println("responseBody = " + responseBody);

A resposta de uma consulta por ID bem-sucedida segue este modelo:

{"_index":"lindorm_index","_id":"0","_version":1,"_seq_no":0,"_primary_term":1,"found":true,"_source":{"field1":"2127821774","field2":"2127821774"}}

Exclua um índice

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

Uma resposta de exclusão bem-sucedida retorna o seguinte:

{"acknowledged":true}

Exemplo completo

O programa de exemplo abaixo combina todas as operações descritas anteriormente:

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.apache.http.util.EntityUtils;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;

import java.util.Random;

public class RestLClientTest {
  public static void main(String[] args) {
    String search_url = "ld-t4n5668xk31ui****-proxy-search-public.lindorm.rds.aliyuncs.com";
    int search_port = 30070;

    // For demo purposes only. Do not hardcode credentials in production code.
    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";

      // Create a search index.
      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);

      // Write 5,000 documents in a batch.
      Random random = new Random();
      Request bulkRequest = new Request("POST", "/_bulk");
      StringBuilder bulkJsonBuilder = new StringBuilder();
      for (int i = 0; i < 5000; i++) {
        // Replace field names and values with those from your application.
        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);

      // Refresh the index to make the written documents visible.
      response = restClient.performRequest(new Request("POST", "/" + indexName + "/_refresh"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // Query all documents in the index (returns up to 10 by default).
      response = restClient.performRequest(new Request("GET", "/" + indexName + "/_search"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // Query the document with ID 0.
      response = restClient.performRequest(new Request("GET", "/" + indexName + "/_doc/0"));
      responseBody = EntityUtils.toString(response.getEntity());
      System.out.println("responseBody = " + responseBody);

      // Delete the index.
      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());
    }
  }
}