Todos los productos
Search
Centro de documentos

Lindorm:Cliente REST de bajo nivel en Java

Última actualización: Sep 14, 2026

El cliente REST de bajo nivel en Java envía solicitudes HTTP sin procesar. No codifica ni decodifica el cuerpo de la solicitud o de la respuesta, por lo que usted tiene control directo sobre el manejo de las peticiones. Úselo cuando necesite conectarse a LindormSearch (compatible con Elasticsearch 7.10 y versiones anteriores) y prefiera gestionar la serialización por su cuenta.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • JDK 1.8 o una versión posterior instalada.

  • LindormSearch activado para su instancia de Lindorm. Consulte Activation guide.

  • La dirección IP de su cliente agregada a la lista blanca de la instancia de Lindorm. Consulte Configure a whitelist.

Instalar el cliente

Agregue las siguientes dependencias en la sección dependencies de su archivo pom.xml o de compilación.

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

Configurar la conexión

Construya un objeto RestClient con el endpoint y las credenciales de 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

Descripción

search_url

El endpoint de LindormSearch para Elasticsearch. Para obtenerlo, consulte View endpoints. Use el endpoint de Virtual Private Cloud (VPC) si sus aplicaciones se ejecutan en una instancia de ECS. Si son aplicaciones locales que se conectan por la red pública, use el endpoint de Internet.

search_port

El puerto del endpoint de LindormSearch. Valor fijo: 30070.

username

El nombre de usuario del motor de búsqueda. Para obtener las credenciales predeterminadas, vaya a la consola de Lindorm, haga clic en Database Connections en el panel de navegación izquierdo y luego seleccione la pestaña Search Engine.

password

La contraseña del motor de búsqueda. Se encuentra en la misma ubicación que username.

Importante

Use una conexión VPC para las aplicaciones desplegadas en una instancia de ECS, ya que ofrece menor latencia y mayor seguridad que una conexión por red pública. Para conectarse por la red pública, primero habilite el endpoint público: en la consola de Lindorm, haga clic en Database Connections en el panel de navegación izquierdo, seleccione la pestaña Search Engine y luego haga clic en Enable Public Endpoint en la esquina superior derecha.

Crear un í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);
}

Una respuesta exitosa se ve de la siguiente manera:

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

Escribir documentos de forma masiva

Use la API Bulk para escribir varios documentos en una sola solicitud. En el siguiente ejemplo se escriben 5,000 documentos en 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);

Después de la escritura masiva, envíe una solicitud de actualización para que los documentos sean visibles en las búsquedas:

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

Una respuesta de actualización exitosa se ve así:

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

Consultar documentos

Consultar todos los documentos del índice (devuelve hasta 10 resultados de forma predeterminada):

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

Consultar un documento por su ID:

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

Una respuesta exitosa a la consulta por ID se ve de la siguiente manera:

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

Eliminar un índice

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

Una respuesta de eliminación exitosa se ve así:

{"acknowledged":true}

Ejemplo completo

A continuación se muestra el programa de ejemplo completo que combina todas las operaciones anteriores:

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