ElasticSearch High Level REST API【1】文档基本操作
获取ES客户端
ES的提供了四种Java客户端,分别为节点客户端(node client)、传输客户端(Transport Client)、低级REST客户端、高级REST客户端。
节点客户端作为集群节点的一部分,在集群节点较多的情况下会影响集群的反应速度。
传输客户端客户端虽然实现了和集群的解耦,相对节点更“轻”,但是会在ES7.0或8.0之后被移除,被“高级Rest客户端”所取代。
在此截取了ES官方文档对此的说明。因此学习“高级RestAPI”的使用还是很有必要的。

如下为ES 客户端的创建:
@Configuration
public class ElasticClient {
private String host = "10.1.59.101";
private int port = 9200; /**
* 获取Rest高级客户端
* @return
*/
@Bean
public RestHighLevelClient getRestHighLevelClient(){
RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));
return new RestHighLevelClient(builder);
} /**
* 获取Rest低级客户端
* @return
*/
@Bean
public RestClient getRestClient(){
RestClient build = RestClient.builder(new HttpHost(host)).build();
return build;
}
下面介绍下ES在Java中基本的文档增删改查操作
索引操作
索引即我们的新增操作,ES提供了三种形式的索引,分别为通过Json字符串、Map集合、XContentBuilder实现索引操作
示例如下:
public void save(User user) {
RestHighLevelClient client = elasticClient.getRestHighLevelClient();
//Json字符串作为数据源
IndexRequest indexRequest1 = new IndexRequest(
"02",
"book",
"3");
String jsonString = "{" +
"\"name\":\"生命的诞生\"," +
"\"type\":\"科学\"," +
"\"price\":\"170\"" +
"}";
indexRequest1.source(jsonString, XContentType.JSON);
//Map集合作为数据源
Map jsonMap = new HashMap<>();
jsonMap.put("user", "userByMap");
jsonMap.put("postDate", new Date());
jsonMap.put("message", "messageByMap");
IndexRequest indexRequest2 = new IndexRequest("posts", "doc", "34")
.source(jsonMap);
//XContentBuilder作为数据源
XContentBuilder builder = null;
try {
builder = XContentFactory.jsonBuilder();
builder.startObject();
builder.field("user", "userXXX");
builder.timeField("postDate", new Date());
builder.field("message", "messageXXX");
builder.endObject();
} catch (IOException e) {
e.printStackTrace();
}
IndexRequest indexRequest3 = new IndexRequest("posts", "doc", "1")
.source(builder);
try {
IndexResponse indexResponse1 = client.index(indexRequest1, RequestOptions.DEFAULT);
client.index(indexRequest2, RequestOptions.DEFAULT);
client.index(indexRequest3, RequestOptions.DEFAULT);
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
查询
根据索引、类型、ID 查询文档,示例如下
public void get(){
RestHighLevelClient client = elasticClient.getRestHighLevelClient();
GetRequest getRequest = new GetRequest(
"posts",
"doc",
"1");
try {
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
删除
public void delete(){
RestHighLevelClient client = elasticClient.getRestHighLevelClient();
DeleteRequest deleteRequest = new DeleteRequest("02", "book", "2");
deleteRequest.timeout(TimeValue.timeValueMinutes(10));
deleteRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
try {
client.delete(deleteRequest, RequestOptions.DEFAULT);
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
更新
public void update(User user){
RestHighLevelClient client = elasticClient.getRestHighLevelClient();
UpdateRequest updateRequest = new UpdateRequest("posts", "doc", "35");
Map map = new HashMap<>();
map.put("message", "message_update");
map.put("user", "user_update");
updateRequest.doc(user.toJsonString(), XContentType.JSON);
try {
client.update(updateRequest, RequestOptions.DEFAULT);
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
查询文档是否存在
public void exists() {
RestHighLevelClient client = elasticClient.getRestHighLevelClient();
GetRequest getRequest = new GetRequest("posts","doc","33");
GetResponse getResponse = null;
try {
getRequest.fetchSourceContext(new FetchSourceContext(false));//禁用获取 _source字段
getRequest.storedFields("_none_");//禁用获取存储字段。
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Bulk批量操作
bulk可以批量执行多条操作语句,bulk支持批量操作不同的命令,例如批量更新和删除
public void bulk(User user){
RestHighLevelClient client = elasticClient.getRestHighLevelClient();
User user2 = new User();
user2.setName("周大福");
user2.setAge(211);
user2.setPosition("珠宝");
BulkRequest bulkRequest = new BulkRequest();
IndexRequest indexRequest1 = new IndexRequest("posts", "doc", "41").source(user.toJsonString(), XContentType.JSON);
IndexRequest indexRequest2 = new IndexRequest("posts", "doc", "42").source(user2.toJsonString(), XContentType.JSON);
DeleteRequest deleteRequest = new DeleteRequest("01", "law", "3");
bulkRequest.add(indexRequest1);
bulkRequest.add(indexRequest2);
bulkRequest.add(deleteRequest);
try {
client.bulk(bulkRequest, RequestOptions.DEFAULT);
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
ElasticSearch High Level REST API【1】文档基本操作的更多相关文章
- Elasticsearch 创建、更新、删除文档、处理冲突
----创建新文档---- 1._index,_type和_id的组合可以唯一标识一个文档,所以确保一个新文档的最简单的办法就是,使用索引请求的POST形式让elsticsearch自动生成唯一_id ...
- ES系列四、ES6.3常用api之文档类api
1.Index API: 创建并建立索引 PUT twitter/tweet/ { "user" : "kimchy", "post_date&quo ...
- 电商管理后台 API 接口文档
1. 电商管理后台 API 接口文档 1.1. API V1 接口说明 接口基准地址:http://127.0.0.1:8888/api/private/v1/ 服务端已开启 CORS 跨域支持 AP ...
- Openstack api 学习文档 & restclient使用文档
Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...
- CYQ.Data 轻量数据层之路 优雅V1.4 现世 附API帮助文档(九)
继上一版本V1.3版本发布到现在,时隔N天了:[V1.3版本开源见:CYQ.Data 轻量数据层之路 华丽V1.3版本 框架开源] N天的时间,根据各路网友的反映及自身的想法,继续修改优化着本框架,力 ...
- Openstack python api 学习文档 api创建虚拟机
Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...
- api(接口)文档管理工具
api(接口)文档管理工具 欢迎光临:博之阅API管理平台 ,做为一个app开发者,还没有用到api管理工具,你就OUT了 点击进入:程序员精华博客大全
- 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.
- MyEclipse下查看Java API帮助文档
每次重装JDK或者升级JDK时,都会忘了如何使MyEclipse关联帮助文档.然后,再花十几分钟重新google搜索,麻烦! 首先下载Javadoc api帮助文档,google搜一下就行了. MyE ...
- API的文档自动生成——基于CDIF的SOA基本能力
当前,作为大部分移动app和云服务后台之间的标准连接方式,REST API已经得到了绝大部分开发者的认可和广泛的应用.近年来,在新兴API经济模式逐渐兴起,许多厂商纷纷将自己的后台业务能力作为REST ...
随机推荐
- python_魔法方法(二):算术运算
python2.2之后,对类和类型做了同意,将int().float().str().list().touple()这些BIF转换为工厂函数 >>> type(len) <cl ...
- winform-Chrome-CefSharp库
相关资源 教程地址:Winform下CefSharp的引用.配置.实例与报错排除 支持html5:http://www.html5tricks.com/demo/html5-css3-windmill ...
- shell脚本之前的基础知识
日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...
- SpringBoot | 第五章:多环境配置
前言 写上一篇看英文资料,耗费了心力呀,这章,相对来说简单点.也比较熟悉,但是这很实用.不扯了,开始~ 多环境配置 maven的多环境配置 springboot多环境配置 总结 老生常谈 多环境配置 ...
- Golang: runnerw.exe: CreateProcess failed with error 216 (no message available)
话说这个我应该遇到几次了 每次新项目都有这问题,我的记忆是金鱼的记忆吗? 好在这次隐约记起是包名的问题... 方法 修改包名为main
- angularjs $state.go页面不刷新数据
假如进入market/beian/add添加数据,保存提交后回退market/beian列表页,没有自动更新数据,必须得手动下拉刷新才会出来 $state.go("marketBeian&q ...
- jQuery 获取和设置表单元素
jQuery提供了val()方法,使用它我们可以快速地获取和设置表单的文本框.单选按钮.以及单选按钮的值. 使用val()不带参数,表示获取元素的值 使用val()给定参数,则表示把值赋给元素 如下: ...
- Backbone源码解析系列
01 编码风格.继承 02 Backbone.Events 03 Backbone.Model 04 Backbone.View 05 Backbone.Router 06 Backbone应用于we ...
- jquery中的置顶,置底,向上,向下的排序功能
css .selectedLi{background: #f0ad4e;color:#fff;} html部分 <ul class="seetSelect2" id='sys ...
- <Android 应用 之路> 天气预报(四)
前言 第二次尝试完成天气预报应用,与上次不同的是,个人感觉这次的Ui不那么丑陋,整体的实用性和界面效果,用户体验相较上一次有所提升,但是还是有很多地方需要完善. 这次使用到的内容比较丰富,包括聚合数据 ...