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 ...
随机推荐
- js 中的 for 循环。。。
for (var i in data){ data[i] } 和for (var i=0;i< data.length; i++){ data[i] } 第一种可能会有bug...
- P2066 机器分配 (DP+DP输出)
题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15,N≤10.分 ...
- redis常用
redis的key和string类型value限制均为512MB
- DB2的常用数据类型
今天在db2中查询数据时出现错误: Overflow occurred during numeric data type conversion:SQLCODE=-413, SQLSTATE=22003 ...
- JS——面向对象、继承
创建对象的方式: 1)单体 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- linux下各种格式软件的安装(引用http://blog.csdn.net/zyz511919766/article/details/7574040)
首先介绍两个简单的方式 第一:sudo apt-get install packagename 命令 如果我们知道我们要安装的软件的确切的名称,那么我们可以简单的通过此条命令来获取和安装软件.apt- ...
- python3+Appium自动化06-屏幕截图
截图方法 save_screenshot() 该方法直接保存当前屏幕截图到当前脚本所在文件位置 driver.save_screenshot('login.png') get_screenshot_a ...
- CentOS Linux解决Device eth0 does not seem to be present【转】
在VMware里克隆出来的CentOS Linux,ifconfig...没有看到eth0,然后重启网卡又报下面错误. 故障现象: service network restartShutting do ...
- 其它电脑访问mysql被拒绝
例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话. mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDE ...
- Java 类型转换String,List,Map,Array
1. JsonString转为Map String jsoNStr = "{\n" + "\t\"TestArray\": [\"1\&qu ...