ElasticSearch High Level REST API【1】文档基本操作

时间:2022-08-27 20:42:33

获取ES客户端

ES的提供了四种Java客户端,分别为节点客户端(node client)、传输客户端(Transport Client)、低级REST客户端、高级REST客户端。

节点客户端作为集群节点的一部分,在集群节点较多的情况下会影响集群的反应速度。

传输客户端客户端虽然实现了和集群的解耦,相对节点更“轻”,但是会在ES7.0或8.0之后被移除,被“高级Rest客户端”所取代。

在此截取了ES官方文档对此的说明。因此学习“高级RestAPI”的使用还是很有必要的。

ElasticSearch High Level REST API【1】文档基本操作

如下为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&period;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 学习文档 &amp&semi; restclient使用文档

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

  5. CYQ&period;Data 轻量数据层之路 优雅V1&period;4 现世 附API帮助文档&lpar;九&rpar;

    继上一版本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&lpar;接口&rpar;文档管理工具

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

  8. 用Swashbuckle给ASP&period;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. 11 个很少人知道但很有用的 Linux 命令

    Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.Linux命令和它们的转换对于Linux用户.Shell脚本程序员和管理员来说是最有 ...

  2. Objective-C实现发短信和接电话

    发短信: [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms://10000"]]; 打电话: ...

  3. 从零开始设计SOA框架(二):请求&sol;响应参数的设计

    每个接口都有请求参数.响应参数.其中请求参数分为公共参数和业务参数.响应参数分为两类:正常的响应参数.统一的错误参数   一.请求参数 1.公共参数:每个接口都有的参数,主要包含appkey.时间戳. ...

  4. &num;define用法集锦

    Definition: The #define Directive You can use the #define directive to give a meaningful name to a c ...

  5. 第四篇、C&lowbar;快速、冒泡、选择、插入排序、二分查找排序、归并、堆排序

    1.快速排序 实现: 1.取中间一个数作为支点 2.分别在支点的左右两边进行查找,如果左边查找到比支点大,右边查找到比支点小,就交换位置,如此循环,比支点小的数就排在了左边,比支点大的就排在右边 3. ...

  6. input text 不可编辑的解决办法

    <div class="inp bg"> <input id="inp-query" type="text" name=& ...

  7. (转载)PHP 提示和技巧

    (转载)http://www.111cn.net/phper/21/b4aea31507014a778b18682943db402f.htm 1. 当您在寻找关于某个具体的 PHP 函数的信息时,请转 ...

  8. 网络分析法(Analytic Network Process,ANP)

    什么是网络分析法 网络分析法(ANP)是美国匹兹堡大学的T.L.Saaty教授于1996年提出的一种适应非独立的递阶层次结构的决策方法,它是在层次分析法(Analytic Hierarchy Proc ...

  9. linux作为服务器,利用top命令查看服务进程的耗用情况

    top命令查看进程服务如下: 其中shift+m可以按照内存的消耗进行排序,shift+p是按照cpu的消耗进程,排序,其中对cpu的消耗是一定时间,谁占用的时间越长消耗越大, 还有按空格键,会刷新一 ...

  10. Linux下date使用

    [root@host1 ~]# date #显示时间 2017年 06月 01日 星期四 17:02:59 CST 以指定格式显示时间: [root@host1 ~]# date +%Y%m%d 20 ...