您的位置 首页 java

8、使用Java High Level REST Client操作elasticsearch

1、Java High Level REST Client说明

Java High Level REST Client从6.0.0开始加入的,目的是以java面向对象的方式来进行请求、响应处理。每个API支持同步/异步两种方式,同步方法直接返回一个结果对象。异步的方法以async为后缀,通过listener参数来通知结果。高级java REST 客户端依赖Elasticsearch core project

兼容性说明:依赖 java1.8 和 Elasticsearch core project,请使用与服务端ES版本一致的客户端版本。

2、Elasticsearch服务搭建

文章中使用Elasticsearch的6.5.4版本,该版本在windows启动时会出现以下异常

[2019-06-30T12:12:58,471][INFO][o.e.p.PluginsService ] [JP55XpU] noplugins loaded
[2019-06-30T12:13:09,651][INFO][o.e.x.s.a.s.FileRolesStore] [JP55XpU] parsed [0] roles from file[D:\devtools\elasticsearch-6.5.4\config\roles.yml]
[2019-06-30T12:13:10,844][ERROR][o.e.b.Bootstrap ] [JP55XpU] Exception
org.elasticsearch.ElasticsearchException:X-Pack is not supported and Machine Learning is not available for [windows-x86];you can use the other X-Pack features (unsupported) by settingxpack.ml.enabled: false in elasticsearch.yml
 atorg.elasticsearch.xpack.ml.MachineLearningFeatureSet.isRunningOnMlPlatform(MachineLearningFeatureSet.java:104)~[?:?]
 atorg.elasticsearch.xpack.ml.MachineLearningFeatureSet.isRunningOnMlPlatform(MachineLearningFeatureSet.java:95)~[?:?]
 

关于该异常可以参考如下这两篇文章的其中的任何一种解决方案

将jdk与jre安装成64位:

 

关闭X-Pack支持:

 

3、Maven集成Java High LevelREST Client

<dependencies>
 <dependency>
 <groupId>org.elasticsearch.client</groupId>
 <artifactId>elasticsearch-rest-high-level-client</artifactId>
 <version>6.5.4</version>
 </dependency>
<dependency>
 <groupId>org.apache.logging.log4j</groupId>
 <artifactId>log4j-core</artifactId>
 <version>2.12.0</version>
 </dependency>
</dependencies>
 

4、Java High Level REST Client 初始化

public static RestHighLevelClient getClient(){
 RestHighLevelClient client = new RestHighLevelClient(
 RestClient.builder(
 new HttpHost(" localhost ", 9200, "http")));
 return client;
}
 

可以给定集群的多个节点地址,构建RestHighLevelClient对象

public static RestHighLevelClient getClient(){
 RestHighLevelClient client = new RestHighLevelClient(
 RestClient.builder(
 new HttpHost("localhost", 9200, "http"),
 new HttpHost("localhost", 9100, "http")));
 return client;
}
 

Client 不再使用了,记得关闭它:

client. close ();
 

API及用法示例,可以参考官网API:

 

5、Create Index(创建索引)

同步方式创建Index

public static void createIndexSync(){
 RestHighLevelClient client=null;
 try{
 client = getClient();
 // 1、创建 创建索引 request  参数:索引名java
 CreateIndexRequest request = new CreateIndexRequest("java");
 // 2、设置索引的settings
 request.settings(Settings.builder().put("index.number_of_shards", 3) // 分片数
 .put("index.number_of_replicas", 2) // 副本数
 );
 // 3、设置索引的mappings
 request.mapping("_doc",
 " {\n" +
 " \"_doc\": {\n" +
 " \"properties\": {\n" +
 " \" message \": {\n" +
 " \" type \": \"text\"\n" +
 " }\n" +
 " }\n" +
 " }\n" +
 " }",
 XContentType.JSON);
 // 4、 设置索引的别名
 request.alias(new Alias("it"));
 RequestOptions requestOptions = RequestOptions.DEFAULT;
 // 5、 发送请求
 // 5.1 同步方式发送请求
 CreateIndexResponse createIndexResponse = client.indices().create(request,requestOptions);
 // 6、处理响应
 boolean acknowledged = createIndexResponse.isAcknowledged();
 boolean shardsAcknowledged = createIndexResponse
 .isShardsAcknowledged();
 System.out.println("acknowledged = " + acknowledged);
 System.out.println("shardsAcknowledged = " + shardsAcknowledged);
 } catch (Exception e) {
 e.printStackTrace();
 }finally {
 try{
 client.close();
 } catch (Exception e) {
 }
 }
}
 

异步方式创建Index:

public static void createIndexAsync(){
 RestHighLevelClient client=null;
 try{
 client = getClient();
 // 1、创建 创建索引request 参数:索引名java
 CreateIndexRequest request = new CreateIndexRequest("python");
 // 2、设置索引的settings
 request.settings(Settings.builder().put("index.number_of_shards", 3) // 分片数
 .put("index.number_of_replicas", 2) // 副本数
 );
 // 3、设置索引的mappings
 request.mapping("_doc",
 " {\n" +
 " \"_doc\": {\n" +
 " \"properties\": {\n" +
 " \"message\": {\n" +
 " \"type\": \"text\"\n" +
 " }\n" +
 " }\n" +
 " }\n" +
 " }",
 XContentType.JSON);
 // 4、 设置索引的别名
 request.alias(new Alias("py"));
 RequestOptions requestOptions = RequestOptions.DEFAULT;
 // 5、 发送请求
 // 5.1 异步方式发送请求
 ActionListener<CreateIndexResponse> listener = new ActionListener<CreateIndexResponse>() {
 public void onResponse(
 CreateIndexResponse createIndexResponse) {
 // 6、处理响应
 boolean acknowledged = createIndexResponse.isAcknowledged();
 boolean shardsAcknowledged = createIndexResponse
 .isShardsAcknowledged();
 System.out.println("acknowledged = " + acknowledged);
 System.out.println(
 "shardsAcknowledged = " + shardsAcknowledged);
 }
 public void onFailure(Exception e) {
 System.out.println("创建索引异常:" + e.getMessage());
 }
 };
 client.indices().createAsync(request, RequestOptions.DEFAULT, listener);
 } catch (Exception e) {
 e.printStackTrace();
 }finally {
 try{
 client.close();
 } catch (Exception e) {
 }
 }
}
 

文章来源:智云一二三科技

文章标题:8、使用Java High Level REST Client操作elasticsearch

文章地址:https://www.zhihuclub.com/194549.shtml

关于作者: 智云科技

热门文章

网站地图