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());

最新文章

  1. 关于Java内存模型的解读
  2. jxl 处理 Excel 样式
  3. hdu 1166
  4. Beta版本——第一次冲刺博客
  5. beta版本工作百分比
  6. iOS - OC NSCache 缓存
  7. PAT-乙级-1046. 划拳(15)
  8. What is XMLHTTP? How to use security zones in Internet Explorer
  9. VS2010发布网站的基本步骤
  10. JavaScript中的execCommand()命令详解及实例展示
  11. Javascript技巧实例精选(2)—文字水平方向上动态漂移
  12. PAT 团体程序设计天梯赛-练习集L1-011. A-B
  13. android 滑动分页
  14. 《java入门第一季》之Arrays类前传(排序问题)
  15. 一步一步实现HTTP服务器-开篇
  16. 初识TensorFlow
  17. random函数的使用
  18. Session.Abandon和Session.Clear的实现和区别
  19. 猥琐百度杯猥琐CTF
  20. Android Studio - 安卓开发工具 打开后报错集合、修复指南

热门文章

  1. 学习shiro第一天
  2. 技能篇丨FineCMS 5.0.10 多个漏洞详细分析
  3. iOS中Category和Extension 原理详解
  4. H3C路由器设置NAT回环、端口回流
  5. 3.dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?
  6. Linux内核编程、调试技巧小集【转】
  7. vs2017离线安装vs tools for unity
  8. HttpWatch功能详细介绍
  9. centos7 下安装rpm的mysql 5.7
  10. 201871010108-高文利《面向对象程序设计(java)》第十五周学习总结