es-05-获取 resthighlevelclient及api
在6.x以前, 使用最多的是transportclient, 但在7.x会被废弃,
先说以前的创建方式:
具体可见:https://www.cnblogs.com/wenbronk/p/6383194.html
- /**
- * 获取连接, 第一种方式
- * @throws Exception
- */
- // @Before
- public void before() throws Exception {
- Map<String, String> map = new HashMap<String, String>();
- map.put("cluster.name", "elasticsearch_wenbronk");
- Settings.Builder settings = Settings.builder().put(map);
- client = TransportClient.builder().settings(settings).build()
- .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("www.wenbronk.com"), Integer.parseInt("")));
- }
- /**
- * 获取连接, 第二种方式
- * @throws Exception
- */
- @Before
- public void before11() throws Exception {
- // 创建客户端, 使用的默认集群名, "elasticSearch"
- // client = TransportClient.builder().build()
- // .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("www.wenbronk.com"), 9300));
- // 通过setting对象指定集群配置信息, 配置的集群名
- Settings settings = Settings.settingsBuilder().put("cluster.name", "elasticsearch_wenbronk") // 设置集群名
- // .put("client.transport.sniff", true) // 开启嗅探 , 开启后会一直连接不上, 原因未知
- // .put("network.host", "192.168.50.37")
- .put("client.transport.ignore_cluster_name", true) // 忽略集群名字验证, 打开后集群名字不对也能连接上
- // .put("client.transport.nodes_sampler_interval", 5) //报错,
- // .put("client.transport.ping_timeout", 5) // 报错, ping等待时间,
- .build();
- client = TransportClient.builder().settings(settings).build()
- .addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("192.168.50.37", )));
- // 默认5s
- // 多久打开连接, 默认5s
- System.out.println("success connect");
- }
最新的创建方式:
- package com.wenbronk.elasticsearch.usage.highLevel;
- import com.google.common.collect.Lists;
- import org.apache.http.HttpHost;
- import org.elasticsearch.client.RestClient;
- import org.elasticsearch.client.RestHighLevelClient;
- import org.junit.jupiter.api.AfterEach;
- import org.junit.jupiter.api.BeforeEach;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Arrays;
- public class RestHighLevelClientParent {
- public static final String HOST = "10.124.147.22,10.124.147.23,10.124.147.32";
- public static final Integer PORT = ;
- protected RestHighLevelClient client;
- @BeforeEach
- public void testBefore() {
- ArrayList<HttpHost> hosts = Lists.newArrayList();
- Arrays.stream(HOST.split(",")).forEach(host -> {
- hosts.add(new HttpHost(host, PORT, "http"));
- });
- client = new RestHighLevelClient(RestClient.builder(hosts.toArray(new HttpHost[])));
- }
- @AfterEach
- public void testAfter() throws IOException {
- client.close();
- }
- }
新的客户端, 对异步的处理方式和以前基本相同
1), index
- @Test
- public void testAsync() throws IOException, InterruptedException {
- CountDownLatch countDownLatch = new CountDownLatch();
- XContentBuilder object = XContentFactory.jsonBuilder()
- .startObject()
- .field("user", "wenbronk")
- .timeField("postData", new Date())
- .field("message", "message format from xcontent")
- .endObject();
- IndexRequest source = new IndexRequest("test", "doc", "").source(object);
- client.indexAsync(source, new ActionListener<IndexResponse>() {
- @Override
- public void onResponse(IndexResponse indexResponse) {
- String id = indexResponse.getId();
- String index = indexResponse.getIndex();
- String type = indexResponse.getType();
- if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) {
- }
- if (indexResponse.getResult() == DocWriteResponse.Result.DELETED) {
- }
- if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
- }
- ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
- if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
- // 有失败的
- }
- // 对失败的进行处理
- if (shardInfo.getFailed() != ) {
- for (ReplicationResponse.ShardInfo.Failure failure : shardInfo.getFailures()) {
- String reason = failure.reason();
- }
- }
- countDownLatch.countDown();
- }
- @Override
- public void onFailure(Exception e) {
- if (e instanceof ElasticsearchException) {
- ElasticsearchException e1 = (ElasticsearchException) e;
- if (e1.status() == RestStatus.CONFLICT) {
- System.out.println("版本冲突 ");
- }
- }
- }
- });
- countDownLatch.await();
- }
2), get
- @Test
- public void testGet() throws InterruptedException {
- CountDownLatch countDownLatch = new CountDownLatch();
- // index, type, id
- GetRequest request = new GetRequest("test", "doc", "");
- // 可选的添加参数
- // disabled _source retrieval
- // request.fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE);
- // Configure source inclusion for specific fields
- // String[] includes = new String[]{"message", "*Data"};
- // String[] excludes = Strings.EMPTY_ARRAY;
- // FetchSourceContext fetchSourceContext =
- // new FetchSourceContext(true, includes, excludes);
- // request.fetchSourceContext(fetchSourceContext);
- // Configure source exclusion for specific fields
- // request.storedFields("message");
- request.routing("routing");
- request.parent("parent");
- request.preference("preference");
- request.realtime(false);
- request.refresh(true);
- request.version();
- request.versionType(VersionType.EXTERNAL);
- // 对response处理
- client.getAsync(request, new ActionListener<GetResponse>() {
- @Override
- public void onResponse(GetResponse getResponse) {
- String type = getResponse.getType();
- String index = getResponse.getIndex();
- String id = getResponse.getId();
- Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
- sourceAsMap.entrySet().forEach(entry -> System.out.println(entry.getKey() + " : " + entry.getValue()));
- countDownLatch.countDown();
- }
- @Override
- public void onFailure(Exception e) {
- // 可能的异常, 1, 不存在, 2 conflict
- if (e instanceof ElasticsearchException) {
- if (((ElasticsearchException) e).status() == RestStatus.NOT_FOUND) {
- System.out.println("要找的id不存在");
- }
- if (((ElasticsearchException) e).status() == RestStatus.CONFLICT) {
- System.out.println("conflict ");
- }
- }
- countDownLatch.countDown();
- }
- });
- countDownLatch.await();
- }
3), update
- @Test
- public void testResponse() throws IOException {
- XContentBuilder builder = XContentFactory.jsonBuilder()
- .startObject()
- .timeField("updated", new Date())
- .field("reason", "daily update")
- .endObject();
- UpdateRequest request = new UpdateRequest("posts", "doc", "")
- .doc(builder);
- client.updateAsync(request, new ActionListener<UpdateResponse>() {
- @Override
- public void onResponse(UpdateResponse updateResponse) {
- String index = updateResponse.getIndex();
- String type = updateResponse.getType();
- String id = updateResponse.getId();
- long version = updateResponse.getVersion();
- if (updateResponse.getResult() == DocWriteResponse.Result.CREATED) {
- } else if (updateResponse.getResult() == DocWriteResponse.Result.UPDATED) {
- } else if (updateResponse.getResult() == DocWriteResponse.Result.DELETED) {
- } else if (updateResponse.getResult() == DocWriteResponse.Result.NOOP) {
- }
- GetResult result = updateResponse.getGetResult();
- if (result.isExists()) {
- String sourceAsString = result.sourceAsString();
- Map<String, Object> sourceAsMap = result.sourceAsMap();
- byte[] sourceAsBytes = result.source();
- } else {
- }
- ReplicationResponse.ShardInfo shardInfo = updateResponse.getShardInfo();
- if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
- }
- if (shardInfo.getFailed() > ) {
- for (ReplicationResponse.ShardInfo.Failure failure : shardInfo.getFailures()) {
- String reason = failure.reason();
- }
- }
- }
- @Override
- public void onFailure(Exception e) {
- }
- });
- }
4), delete
- @Test
- public void testDelete() {
- DeleteRequest deleteRequest = new DeleteRequest("test", "doc", "");
- client.deleteAsync(deleteRequest, new ActionListener<DeleteResponse>() {
- @Override
- public void onResponse(DeleteResponse deleteResponse) {
- String index = deleteResponse.getIndex();
- String type = deleteResponse.getType();
- String id = deleteResponse.getId();
- long version = deleteResponse.getVersion();
- ReplicationResponse.ShardInfo shardInfo = deleteResponse.getShardInfo();
- if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
- }
- if (shardInfo.getFailed() > ) {
- for (ReplicationResponse.ShardInfo.Failure failure : shardInfo.getFailures()) {
- String reason = failure.reason();
- }
- }
- }
- @Override
- public void onFailure(Exception e) {
- // 可能的异常, 1, 不存在, 2 conflict
- if (e instanceof ElasticsearchException) {
- if (((ElasticsearchException) e).status() == RestStatus.NOT_FOUND) {
- System.out.println("id不存在");
- }
- if (((ElasticsearchException) e).status() == RestStatus.CONFLICT) {
- System.out.println("conflict ");
- }
- }
- }
- });
- }
5), bulk
- @Test
- public void testBulk() {
- BulkRequest request = new BulkRequest();
- request.add(new DeleteRequest("posts", "doc", ""));
- request.add(new UpdateRequest("posts", "doc", "")
- .doc(XContentType.JSON,"other", "test"));
- request.add(new IndexRequest("posts", "doc", "")
- .source(XContentType.JSON,"field", "baz"));
- // 可选的参数
- request.timeout(TimeValue.timeValueMinutes());
- request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
- request.waitForActiveShards();
- // 异步处理
- client.bulkAsync(request, new ActionListener<BulkResponse>() {
- @Override
- public void onResponse(BulkResponse bulkItemResponses) {
- for (BulkItemResponse bulkItemResponse : bulkItemResponses) {
- DocWriteResponse itemResponse = bulkItemResponse.getResponse();
- if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.INDEX || bulkItemResponse.getOpType() == DocWriteRequest.OpType.CREATE) {
- IndexResponse indexResponse = (IndexResponse) itemResponse;
- } else if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.UPDATE) {
- UpdateResponse updateResponse = (UpdateResponse) itemResponse;
- } else if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.DELETE) {
- DeleteResponse deleteResponse = (DeleteResponse) itemResponse;
- }
- // 失败的返回
- if (bulkItemResponse.isFailed()) {
- BulkItemResponse.Failure failure = bulkItemResponse.getFailure();
- }
- }
- }
- @Override
- public void onFailure(Exception e) {
- }
- });
- }
6), bulkprocess
- @Test
- public void testBulkProcess() throws InterruptedException {
- // create bulkprocessor
- BulkProcessor.Builder builder = BulkProcessor.builder(client::bulkAsync, new BulkProcessor.Listener() {
- @Override
- public void beforeBulk(long executionId, BulkRequest request) {
- int numberOfActions = request.numberOfActions();
- logger.debug("Executing bulk [{}] with {} requests",
- executionId, numberOfActions);
- }
- @Override
- public void afterBulk(long executionId, BulkRequest request, BulkResponse response) {
- if (response.hasFailures()) {
- logger.warn("Bulk [{}] executed with failures", executionId);
- } else {
- logger.debug("Bulk [{}] completed in {} milliseconds",
- executionId, response.getTook().getMillis());
- }
- }
- // when failure, will be called
- @Override
- public void afterBulk(long executionId, BulkRequest request, Throwable failure) {
- logger.error("Failed to execute bulk", failure);
- }
- });
- // 添加参数
- builder.setBulkActions(); // 刷新时间
- builder.setBulkSize(new ByteSizeValue(1L, ByteSizeUnit.MB)); // 刷新长度
- builder.setConcurrentRequests(); // 并发度
- builder.setFlushInterval(TimeValue.timeValueSeconds(10L)); // 刷新周期
- builder.setBackoffPolicy(BackoffPolicy.constantBackoff(TimeValue.timeValueSeconds(1L), ));
- BulkProcessor bulkProcessor = builder.build();
- // 添加批量执行数据
- IndexRequest one = new IndexRequest("posts", "doc", "").
- source(XContentType.JSON, "title", "In which order are my Elasticsearch queries executed?");
- IndexRequest two = new IndexRequest("posts", "doc", "")
- .source(XContentType.JSON, "title", "Current status and upcoming changes in Elasticsearch");
- IndexRequest three = new IndexRequest("posts", "doc", "")
- .source(XContentType.JSON, "title", "The Future of Federated Search in Elasticsearch");
- bulkProcessor.add(one);
- bulkProcessor.add(two);
- bulkProcessor.add(three);
- boolean terminated = bulkProcessor.awaitClose(30L, TimeUnit.SECONDS);
- bulkProcessor.close();
- }
7), multiget
- @Test
- public void testMultiGet() {
- MultiGetRequest request = new MultiGetRequest();
- request.add(new MultiGetRequest.Item("index", "type", "example_id"));
- request.add(new MultiGetRequest.Item("index", "type", "another_id"));
- client.multiGetAsync(request, new ActionListener<MultiGetResponse>() {
- @Override
- public void onResponse(MultiGetResponse multiGetItemResponses) {
- MultiGetItemResponse firstItem = multiGetItemResponses.getResponses()[];
- assertNull(firstItem.getFailure());
- GetResponse firstGet = firstItem.getResponse();
- String index = firstItem.getIndex();
- String type = firstItem.getType();
- String id = firstItem.getId();
- if (firstGet.isExists()) {
- long version = firstGet.getVersion();
- String sourceAsString = firstGet.getSourceAsString();
- Map<String, Object> sourceAsMap = firstGet.getSourceAsMap();
- byte[] sourceAsBytes = firstGet.getSourceAsBytes();
- } else {
- }
- }
- @Override
- public void onFailure(Exception e) {
- }
- });
- }
es-05-获取 resthighlevelclient及api的更多相关文章
- html5获取地理位置信息API
html5获取地理位置信息API 在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位 ...
- Struts2获取Servlet的api的两种方式,解决ParameterAware过时的问题
servlet API通过ActionContext进行获取 Struts2对HttpServletRequest,HttpSession和ServletContext进行了封装,构造了3个Map对象 ...
- 微信小程序把玩(三十八)获取设备信息 API
原文:微信小程序把玩(三十八)获取设备信息 API 获取设备信息这里分为四种, 主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo, 重力感应数据wx. ...
- WIN10以后如果Manifest中不写支持WIN10的话,获取版本号的API获取的是6
if TOSVersion.Major = 10 then // 高版本的Delphi(比如Berlin)可以这样写 ShowMessage('Windows 10'); 或者: if Win32M ...
- 自动获取淘宝API数据访问的SessionKey
最近在忙与淘宝做对接的工作,总体感觉淘宝的api文档做的还不错,不仅有沙箱测试环境,而且对于每一个api都可以通过api测试工具生成想要的代码,你完全可以先在测试工具中测试之后再进行代码的编写,这样就 ...
- 如何获取豆瓣电影 API Key
如何获取豆瓣电影 API Key 豆瓣 API Key 不能使用了 ! solutions & !== ? https://frodo.douban.com/api/v2/subject_co ...
- Android 神兵利器之通过解析网页获取到的API数据合集,可拿来就用
AppApis 前段时间,写了个做app的实战系列教程,其中一篇章提到了解析网页中的数据为己所用,看到大家的响应还不错,于是把自己以前解析过的网页数据都整理了下,开放出来,给更多的人使用,希望可以帮助 ...
- es的rest风格的api文档
rest风格的api put http://127.0.0.1:9200/索引名称/类型名称/文档id (创建文档,指定文档id) post http://127.0.0.1:9200/索引名称/类型 ...
- OpenGL ES无法获取贴图数据原因
最近在做一个项目,要从贴图中获取图像数据,查了很多资料,也琢磨很久,获取到的数据都是0.终于在一次偶然的机会,发现了端倪,成功了. 不得不说这"一分灵感"真的很重要 以下是在获取贴 ...
随机推荐
- 关于Lambda
1. 查询时,包含关联子对象.如: 数据库中包含表Father和Son,映射实体如下: public class Father { public string Name{get;set;} publi ...
- stm32常识
cmsis全称Cortex Microcontroller Software Interface Standard,就是Cortex微处理器软件接口标准 stm32每组gpio有7组端口,分别是2个3 ...
- USTC《现代软件工程》春季学期——第一次个人作业:词频统计
截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...
- poj 2192 Zipper
题目 刚开始本来觉得可以用队列来写,但是 例如 ta te teta,ta的t先出队列那就不行了,所以还得用dp dp[i][j] 表示A前i个字符与B前j个字符是否能构成C前i+j个字符 要使 dp ...
- python模块补充
一.模块补充 configparser 1.基本的读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -opti ...
- zoj2607
题意:如左图,给定A,B,C,D的面积分别为大于等于a,b,c,d,求最小的面积 思路:因为a,b肯定有一个是满的(不然还可压缩到更小),同理,ac,bd,cd都只有一个是满的,所以有可能是对角满的, ...
- day05_雷神_函数进阶
#day05 1.迭代器 1.1可迭代对象 str,list,tuple,dict,set,range,文件句柄 等都是可迭代对象 第一种方法:在该对象中,含有__iter__方法的就是可迭代对象,遵 ...
- 安装Chrome浏览器
Ubuntu 16.04下安装64位谷歌Chrome浏览器 在 Ubuntu 16.04 中,要想使用谷歌的 Chrome 浏览器,可以通过命令行的方式手动安装. 1.进入 Ubuntu 16.04 ...
- Android-Kotlin-when&类型推断
Kotlin的when表达式 TextEngine 描述文字处理对象: package cn.kotlin.kotlin_base02 /** * 描述文字处理对象 * * val textConte ...
- mysql命令行客户端结果分页浏览
转载请注明出处:http://xiezhenye.com/2008/06/mysql%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%ae%a2%e6%88%b7%e7%ab%af%e7% ...