pom文件:

<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.2.0</version>
</dependency>

创建client(client可以关闭, 建议在停止应用前调用close() 方法):

RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("10.8.3.55", 9200, "http")));
// 1. 检测索引是否存在(所有和索引有关的操作全部推荐用org.elasticsearch.client.indices包下的类)
GetIndexRequest request = new GetIndexRequest("twitter");
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
// 2. 创建索引
CreateIndexRequest request = new CreateIndexRequest("twitter");
request.settings(Settings.builder()
.put("index.number_of_shards", 1)
.put("index.number_of_replicas", 1)
); // 第一种
request.mapping("{\"properties\":{\"msg\":{\"type\":\"text\"}}}", XContentType.JSON); // 第二种
Map<String, Object> properties = new HashMap<>();// properties Map<String, Object> message = new HashMap<>();
message.put("type", "text");
properties.put("message", message);// 添加映射
Map<String, Object> username = new HashMap<>();
username.put("type", "keyword");
properties.put("username", username);// 添加映射 Map<String, Object> mapping = new HashMap<>();
mapping.put("properties", properties);
request.mapping(mapping); CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse.index());
// 3. 增加文档(如果类注释推荐使用org.elasticsearch.client.Requests来创建类,最好用他推荐的方式)
IndexRequest request = Requests.indexRequest("twitter");
request.id("1");// 指定ID
request.source("message", "消息内容...abc",
"username", "jack 杰克");// 支持多种方式
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse);
// 4. 修改文档
UpdateRequest request = new UpdateRequest("twitter", "1");
request.doc("message", "修改之后的消息内容...abc",
"username", "修改之后的jack 杰克");// 支持多种方式
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println(response);
// 5. Bulk
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest("twitter", "1"));
request.add(new UpdateRequest("twitter", "2")
.doc(XContentType.JSON,"username", "jack==="));
request.add(new IndexRequest("twitter").id("3")
.source(XContentType.JSON,"username", "jack222")); BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
System.out.println(response.hasFailures());
// 6. 根据ID获取文档
GetRequest request = Requests.getRequest("twitter").id("2");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
System.out.println(response.getSourceAsString());
        // 7. Search
SearchRequest request = new SearchRequest("twitter");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
Iterator<SearchHit> hits = response.getHits().iterator();
ObjectMapper mapper = new ObjectMapper();
List<Person> personList = new ArrayList<>();
while (hits.hasNext()) {
personList.add(mapper.readValue(hits.next().getSourceAsString(), Person.class));
}
System.out.println(personList);

查询聚合DSL语句构建使用 SearchSourceBuilder:

//   样例 伪代码:

//        SearchSourceBuilder builder = new SearchSourceBuilder();
// String[] include = {"timeStamp",
// "msgBody.boxList.boxStatus.boxCurrent",
// "msgBody.boxList.batInfo.batSN",
// "msgBody.boxList.batStatus.batCurrent",
// "msgBody.boxList.batStatus.batVoltage",
// "msgBody.boxList.batStatus.batRSOC"};
// builder.query(QueryBuilders.boolQuery()
//// .filter(QueryBuilders.termQuery("msgBody.boxList.batInfo.batSN", "BAA2118122200104"))
// .filter(QueryBuilders.rangeQuery("timeStamp").gte(1557729000).lte(1557741600)))
// .sort("timeStamp", SortOrder.ASC)
// .from(0)
// .size(100).fetchSource(include, null);
//// builder.aggregation(AggregationBuilders.terms("data_count").field("deviceInfo.deviceSN")).size(0);

High Rest client使用参考 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html

聚合结果分析参考: https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/_bucket_aggregations.html

获取聚合必须要指定相关的类 如 Terms:

Terms data = response.getAggregations().get("data_count");
System.out.println(data.getBuckets().get(0).getKey());
System.out.println(data.getBuckets().get(0).getDocCount());
System.out.println(response.toString());

ElasticSearch : High Rest Api 使用的更多相关文章

  1. elasticsearch中的API

    elasticsearch中的API es中的API按照大类分为下面几种: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作 查看A ...

  2. Elasticsearch利用cat api快速查看集群状态、内存、磁盘使用情况

    使用场景 当Elasticsearch集群中有节点挂掉,我们可以去查看集群的日志信息查找错误,不过在查找错误日志之前,我们可以通过elasticsearch的cat api简单判断下各个节点的状态,包 ...

  3. Elasticsearch for python API模块化封装

    Elasticsearch for python API模块化封装 模块的具体功能 检测Elasticsearch节点是否畅通 查询Elasticsearch节点健康状态 查询包含的关键字的日志(展示 ...

  4. Springboot整合elasticSearch的官方API实例

    前言:在上一篇博客中,我介绍了从零开始安装ElasticSearch,es是可以理解为一个操作数据的中间件,可以把它作为数据的存储仓库来对待,它具备强大的吞吐能力和计算能力,其基于Lucene服务器开 ...

  5. Elasticsearch中JAVA API的使用

    1.Elasticsearch中Java API的简介 Elasticsearch 的Java API 提供了非常便捷的方法来索引和查询数据等. 通过添加jar包,不需要编写HTTP层的代码就可以开始 ...

  6. elasticsearch【cat API,系统数据】指令汇总

    本博文讲述的ES获取系统数据的API是基于Elasticsearch 2.4.1版本的. 0. overview a. 下面将要介绍的所有的指令,都支持一个查询参数v(verbose),用来显示详细的 ...

  7. Elasticsearch使用REST API实现全文检索

    通过rest api添加检索数据,阅读官方文档可以发现,elasticsearch支持动态映射,但是其中有不少问题,且听慢慢详解. 本文主要讲述三点内容: 1 Elasticsearch常用的rest ...

  8. 【重新分配分片】Elasticsearch通过reroute api重新分配分片

    elasticsearch可以通过reroute api来手动进行索引分片的分配. 不过要想完全手动,必须先把cluster.routing.allocation.disable_allocation ...

  9. ElasticSearch 2 (4) - API Convention

    ElasticSearch 2.1.1 (4) - API Convention The elasticsearch REST APIs are exposed using JSON over HTT ...

  10. elasticsearch 6.0java api的使用

    elasticsearch 6.0 中java api的使用 1:使用java api创建elasticsearch客户端 package com.search.elasticsearch; impo ...

随机推荐

  1. 原生JavaScript HTML DOM Style 对象参考

    Style 对象属性 可以在Style对象上使用以下属性: “CSS”列指示定义属性的CSS版本(CSS1,CSS2或CSS3). 属性 描述 CSS alignContent 当项目不使用所有可用空 ...

  2. jQuery遍历 - 过滤first(),last()和eq()使用

    jQuery遍历 - 过滤最基本的过滤方法是first(),last()和eq(),它们允许您根据元素在一组元素中的位置选择特定元素. 其他过滤方法(如filter()和not())允许您选择与特定条 ...

  3. Ext.create使用(下)

    本文介绍第三种使用方法: //通过类的引用实例化一个类 var w1 = Ext.create(Ext.window.Window, {//类的引用 title: '窗体', html:'<fo ...

  4. Google Analytics 学习笔记二 —— GA部署

    一.直接部署 直接复制GA跟踪代码 放到所有页面 跟踪代码放到 "head"前面 二.GTM部署方法一 三.GTM部署方法二 Tacking ID 四.测试.参数配置与调优

  5. Ubuntu 18.04通过命令禁用/开启触控板

    Ubuntu下经常遇到无法用快捷键关闭触控板的情况,博主的电脑安装Ubuntu18.04后便出现了该问题. 解决办法: 首先查看输入设备的id,命令行输入: xinput ,插鼠标与不插鼠标时,Tou ...

  6. C语言的10大基础算法

    C语言的10大基础算法 算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.本文包括了经典的Fibonacci数列.简易 ...

  7. 解析YAML文件

    YamlMapFactoryBean yamlMapFactoryBean = new YamlMapFactoryBean(); yamlMapFactoryBean.setResources(ne ...

  8. Linux 动态链接库路径 LD_LIBRARY_PATH

    如果遇到一些 .so 缺失问题 把路径添加到这个变量里面就可以了,注意跟PATH的区别 export LD_LIBRARY_PATH= 注意使用 export 否则变量设置成功但是子进程不可见

  9. golang 登录

    用户的两种登录模式 1.LDAP登录 //ldapLogin 通过LDAP登陆 func (m *Member) ldapLogin(account string, password string) ...

  10. python 并行处理数据

    来源:https://blog.csdn.net/weixin_42001089/article/details/88843152 import multiprocessing import time ...