百度智能云Elasticsearch Java 客户端 - High Level REST Client
文档简介:
本文基于Java High Level REST Client 7.x版本,为您介绍Elasticsearch Java API的用法。
准备工作:
安装Java,要求JDK版本为1.8及以上。
创建Baidu Elasticsearch实例,版本7.4.2。
本文基于Java High Level REST Client 7.x版本,为您介绍Elasticsearch Java API的用法。
准备工作
- 安装Java,要求JDK版本为1.8及以上。
-
创建Baidu Elasticsearch实例,版本7.4.2。
注意 High Level Client能够向上兼容,但为了保证最大程度地使用最新版客户端的特性,推荐High Level Client版本与集群版本一致。
- 创建Java Maven工程,并将如下的pom依赖添加到Java工程的pom.xml文件中。
pom依赖
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-
rest-high-level-client</artifactId> <version>7.4.2</version> </dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version>
</dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId>
<version>2.7</version> </dependency>
示例
以下代码为使用Create Index API创建索引,使用异步调用的方式写入文档,删除文档,使用Delete API删除该索引等操作的示例,可供参考。
import java.io.IOException; 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.HttpAsync
ClientBuilder; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.admin.
indices.delete.DeleteIndexRequest; 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.action.support.master.
AcknowledgedResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client
.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.
RestHighLevelClient; import org.elasticsearch.client.indices.CreateIndexRequest; import org.elasticsearch.
client.indices.CreateIndexResponse; import org.elasticsearch.common.settings.Settings; import org.
elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType; public class RestClientTest742 { public static
void main(String[] args) { final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
//访问用户名和密码为您创建Elasticsearch实例时设置的用户名和密码。 credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("{访问用户名}", "{访问密码}")); // 通过builder创建rest client,配置http
client的HttpClientConfigCallback。 // ES HTTP URL 在Baidu Elasticsearch界面中可以查询 RestClientBuilder
builder = RestClient.builder(new HttpHost("{ES HTTP URL}", 8200)) .setHttpClientConfigCallback(new
RestClientBuilder.HttpClientConfigCallback() { @Override public HttpAsyncClientBuilder customizeHttpC
lient(HttpAsyncClientBuilder httpClientBuilder) { return httpClientBuilder.setDefaultCredentialsProvider
(credentialsProvider); } }); // RestHighLevelClient实例通过REST low-level client builder进行构造。
RestHighLevelClient client = new RestHighLevelClient(builder); try { //创建索引 CreateIndexRequest
createRequest = new CreateIndexRequest("my_index"); //创建的每个索引都可以有与之关联的特定设置。
createRequest.settings(Settings.builder() .put("index.number_of_shards", 3) .put("index.number_of_replicas", 1)
.put("index. refresh_interval", "10s") ); // 创建索引时创建文档类型映射 createRequest.mapping("{\n" + "
\"message\": {\n" + " \"properties\": {\n" + " \"message\": {\n" + "
\"type\": \"text\"\n" + " }\n" + " }\n" + " }\n" + " }", XContentType.JSON);
// 同步执行创建索引操作 CreateIndexResponse createIndexResponse = client.indices().create(createRequest,
RequestOptions.DEFAULT); System.out.println("create index successfully! response : "
+ createIndexResponse.toString()); // 写入文档 // 以XContentBuilder对象的形式提供,Elasticsearch
内部会帮我们生成JSON内容 XContentBuilder jsonBuilder = XContentFactory.jsonBuilder(); jsonBuilder.startObject();
{ jsonBuilder.field("user", "Kobe Bryant"); jsonBuilder.field("number", 24); jsonBuilder.field("message",
"One of the greatest basketball players since the 21st century"); } jsonBuilder.endObject(); IndexRequest
indexRequest = new IndexRequest("my_index").id("1").source(jsonBuilder); //异步执行写入文档操作,
方法不会阻塞并立即返回。 ActionListener<IndexResponse> listener = new ActionListener<IndexResponse>()
{ @Override public void onResponse(IndexResponse indexResponse) { //执行成功时调用。 Response以参数方式提供
System.out.println("Index doc successfully! response : " + indexResponse.toString()); } @Override public
void onFailure(Exception e) { //在失败的情况下调用。 引发的异常以参数方式提供 System.out.println("Index doc
fail!"); e.printStackTrace(); } }; //异步执行索引请求需要将IndexRequest实例和ActionListener实例传递给异步方法:
client.indexAsync(indexRequest, RequestOptions.DEFAULT, listener); // 删除文档 DeleteRequest deleteRequest
= new DeleteRequest("my_index").id("1"); // 执行删除文档操作 DeleteResponse deleteResponse = client.delete
(deleteRequest, RequestOptions.DEFAULT); System.out.println("Delete doc successfully! \n" + deleteResponse.
toString() + "\n" + deleteResponse.status()); // 指定要删除的索引名称 DeleteIndexRequest deleteIndexRequest
= new DeleteIndexRequest("my_index"); // 执行删除索引操作 AcknowledgedResponse deleteIndexResponse =
client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT); System.out.println("delete index
successfully! response : " + deleteIndexResponse.toString()); } catch (IOException ioException)
{ // 异常处理。 ioException.printStackTrace(); } finally { // 在不需要使用client后,将client关闭。
try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } }
以上示例代码中带{}的参数需要替换为您具体业务的参数,详情请参见代码注释。
更多Java High Level REST Client的使用特性,请参见Java High Level REST Client官方文档。