获取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】文档基本操作的更多相关文章

  1. Elasticsearch 创建、更新、删除文档、处理冲突

    ----创建新文档---- 1._index,_type和_id的组合可以唯一标识一个文档,所以确保一个新文档的最简单的办法就是,使用索引请求的POST形式让elsticsearch自动生成唯一_id ...

  2. ES系列四、ES6.3常用api之文档类api

    1.Index API: 创建并建立索引 PUT twitter/tweet/ { "user" : "kimchy", "post_date&quo ...

  3. 电商管理后台 API 接口文档

    1. 电商管理后台 API 接口文档 1.1. API V1 接口说明 接口基准地址:http://127.0.0.1:8888/api/private/v1/ 服务端已开启 CORS 跨域支持 AP ...

  4. Openstack api 学习文档 & restclient使用文档

    Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...

  5. CYQ.Data 轻量数据层之路 优雅V1.4 现世 附API帮助文档(九)

    继上一版本V1.3版本发布到现在,时隔N天了:[V1.3版本开源见:CYQ.Data 轻量数据层之路 华丽V1.3版本 框架开源] N天的时间,根据各路网友的反映及自身的想法,继续修改优化着本框架,力 ...

  6. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  7. api(接口)文档管理工具

    api(接口)文档管理工具 欢迎光临:博之阅API管理平台  ,做为一个app开发者,还没有用到api管理工具,你就OUT了 点击进入:程序员精华博客大全  

  8. 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.

  9. MyEclipse下查看Java API帮助文档

    每次重装JDK或者升级JDK时,都会忘了如何使MyEclipse关联帮助文档.然后,再花十几分钟重新google搜索,麻烦! 首先下载Javadoc api帮助文档,google搜一下就行了. MyE ...

  10. API的文档自动生成——基于CDIF的SOA基本能力

    当前,作为大部分移动app和云服务后台之间的标准连接方式,REST API已经得到了绝大部分开发者的认可和广泛的应用.近年来,在新兴API经济模式逐渐兴起,许多厂商纷纷将自己的后台业务能力作为REST ...

随机推荐

  1. UiAutomator编译与运行测试代码

    编译与运行步骤 1.创建build文件.打开cmd命令窗口,进入工程路径cd E:\workspace\UiAutomatorDemo1,然后输入命令android create uitest-pro ...

  2. DevOps的工程化

    孙敬云 --Worktile高级系统架构师,WTC成员 1.研发的困境 互联网的环境 互联网这个环境比较特别,包括现在不只是互联网,就算是被互联网赋能的这些“互联网+”的企业也在改变,用户在发生变化, ...

  3. windows用一键安装包安装(推荐)

    为了简化大家在windows下面的安装,我们在xampp基础上做了禅道的windows一键安装包.xampp是业内非常著名的AMP集成运行环境.禅道的一键安装包主要在它基础上做了大量的精简,并集成了我 ...

  4. 汇编debug

    R:查看.改变CPU寄存器的内容 D:查看内存中的内容 E:改写内存中的内容 U:将内存中的机器指令翻译成汇编指令 T:执行一条机器指令 A:以汇编指令的格式在内存中写入一条机器指令 第一步:先是[开 ...

  5. Kotlin lateinit 和 by lazy 的区别

    1.lazy{} 只能用在val类型, lateinit 只能用在var类型 2.lateinit不能用在可空的属性上和java的基本类型上 3.lateinit可以在任何位置初始化并且可以初始化多次 ...

  6. Authentication to host '***‘' for user 'root' using method 'mysql_native_password' failed with message: Reading from the stream has failed.

    如下场景: 一个页面中需要用户填入文字信息,并上传图片,上传图片是单独调用上传文件接口的,当用户上传图片后,马上点保存,就会报错. Authentication to host '***‘' for ...

  7. centOS7虚拟机连接大网

    1.启动vm服务 如果遇到无法启动时,需要还原vm默认配置解决 2.更改vm设置为NAT模式 3.centOS开启DHCP

  8. 不该被忽视的CoreJava细节(四)

    令人纳闷的数组初始化细节 这个细节问题我很久以前就想深入研究一下,但是一直没有能够抽出时间,借这系列文章的东风,尽量解决掉这个"心头病". 下面以一维int数组为例,对数组初始化方 ...

  9. GetIPAddress——获得本地IP地址信息

    1.gethostname()需要初始化套接字库 加载#pragma comment(lib,"ws2_32.lib"),和WSAStartup(MAKEWORD(2,2),&am ...

  10. pta编程题5 Pop Sequence

    第一次提交结果都是YES,后来检查发现Push,Pop函数写的有问题,即Stack sta改为引用Stack &sta,否则不能改变实参的值. #include <iostream> ...