O Alibaba Cloud Elasticsearch oferece suporte a quatro clientes Java para interação com seu cluster. Cada cliente utiliza um protocolo diferente e atende a versões específicas do Elasticsearch. Escolha o cliente adequado à versão do seu cluster e ao seu caso de uso.
Tipos de cliente
|
Cliente |
Protocolo |
Status |
Versões do ES suportadas |
|
Transport Client |
TCP |
Obsoleto |
5.x–6.x |
|
Java Low Level REST Client |
HTTP |
Mantido |
Todas as versões |
|
Java High Level REST Client |
HTTP |
Obsoleto (desde o ES 7.15) |
6.x–7.x |
|
Elasticsearch Java API Client |
HTTP |
Recomendado |
7.17 e posteriores |
O Transport Client comunica-se com o cluster via TCP e tornou-se obsoleto nas versões mais recentes do Elasticsearch. Caso utilize o Transport Client 5.5 para acessar um cluster 5.5 ou o Transport Client 5.6 para acessar um cluster 5.6, ocorrerá o erro NoNodeAvailableException. Use o Transport Client 5.3.3 ou o Java Low Level REST Client como alternativa.
O Java High Level REST Client foi descontinuado a partir do Elasticsearch 7.15. Em novos projetos com ES 7.17 ou superior, use o Elasticsearch Java API Client.
Como funciona
Todos os clientes Java baseados em REST (Low Level REST Client, High Level REST Client e Java API Client) conectam-se ao cluster Elasticsearch por HTTPS mediante autenticação básica. O cliente envia solicitações HTTP ao endpoint do cluster e recebe respostas JSON.
O Transport Client conecta-se via TCP em vez de HTTP. Como a comunicação baseada em TCP impõe restrições de compatibilidade de versão inexistentes nos clientes HTTP, o Elasticsearch descontinuou o Transport Client a partir da versão 7.x.
Compatibilidade de versões
Alinhe a versão do cliente à versão do cluster para evitar problemas de compatibilidade. O Java API Client segue a numeração de versão do Elasticsearch: um cliente na versão 8.x é compatível com clusters Elasticsearch 8.x e versões menores subsequentes dentro da mesma release principal.
|
Versão do cluster Elasticsearch |
Cliente recomendado |
|
5.x |
Transport Client 5.3.3 ou Java Low Level REST Client |
|
6.x |
Java High Level REST Client 6.x ou Java Low Level REST Client |
|
7.x (7,0–7,16) |
Java High Level REST Client 7.x ou Java Low Level REST Client |
|
7.17 e posteriores |
Elasticsearch Java API Client |
|
8.x |
Elasticsearch Java API Client 8.x |
Exemplos de uso
Todos os exemplos utilizam autenticação básica. Substitua os placeholders pelos valores reais antes de executar o código.
|
Placeholder |
Descrição |
|
|
Endpoint público ou interno do cluster. Consulte-o na página Basic Information do cluster no console do Elasticsearch. |
|
|
Nome de usuário do cluster. O padrão é |
|
|
Senha do cluster. Para redefini-la, acesse a página Security do cluster. |
|
|
Nome do índice alvo da operação. |
|
|
ID do documento. |
Java High Level REST Client
Este exemplo usa o High Level REST Client 6.7. Adicione a seguinte dependência ao arquivo Maven pom.xml:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.7.0</version>
</dependency>
Para Gradle, adicione:
dependencies {
implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.7.0'
}
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 HighLevelRestClientExample {
private static final RequestOptions COMMON_OPTIONS;
static {
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
COMMON_OPTIONS = builder.build();
}
public static void main(String[] args) throws IOException {
// Set up credentials
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("<UserName>", "<YourPassword>"));
// Create the client
RestClientBuilder builder = RestClient.builder(
new HttpHost("<YourEsHost>", 9200, "http"))
.setHttpClientConfigCallback(
(HttpAsyncClientBuilder httpClientBuilder) ->
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
RestHighLevelClient client = new RestHighLevelClient(builder);
// Index a document
Map<String, Object> document = new HashMap<>();
document.put("title", "Example document");
document.put("content", "Hello, Elasticsearch!");
IndexRequest indexRequest = new IndexRequest("<YourEsIndex>")
.id("<YourEsId>")
.source(document);
IndexResponse indexResponse = client.index(indexRequest, COMMON_OPTIONS);
System.out.println("Indexed document ID: " + indexResponse.getId());
// Delete a document
DeleteRequest deleteRequest = new DeleteRequest("<YourEsIndex>", "<YourEsId>");
DeleteResponse deleteResponse = client.delete(deleteRequest, COMMON_OPTIONS);
System.out.println("Deleted document ID: " + deleteResponse.getId());
client.close();
}
}
Java Low Level REST Client
O Java Low Level REST Client é compatível com todas as versões do Elasticsearch. Utilize-o quando precisar de ampla compatibilidade entre versões ou desejar controle total sobre a serialização das solicitações.
Adicione a seguinte dependência ao arquivo Maven pom.xml:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.7.0</version>
</dependency>
Para Gradle, adicione:
dependencies {
implementation 'org.elasticsearch.client:elasticsearch-rest-client:6.7.0'
}
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;
public class LowLevelRestClientExample {
public static void main(String[] args) throws Exception {
// Set up credentials
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("<UserName>", "<YourPassword>"));
// Create the client
RestClient client = RestClient.builder(
new HttpHost("<YourEsHost>", 9200, "http"))
.setHttpClientConfigCallback(
(HttpAsyncClientBuilder httpClientBuilder) ->
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider))
.build();
// Use the client to send requests...
client.close();
}
}
Tópicos relacionados
Para códigos de exemplo de todos os tipos de cliente, consulte Visão geral.
Para redefinir a senha do cluster, consulte Redefinir a senha de acesso de um cluster Elasticsearch.