ElasticSearch : High Rest Api 使用
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 使用的更多相关文章
- elasticsearch中的API
elasticsearch中的API es中的API按照大类分为下面几种: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作 查看A ...
- Elasticsearch利用cat api快速查看集群状态、内存、磁盘使用情况
使用场景 当Elasticsearch集群中有节点挂掉,我们可以去查看集群的日志信息查找错误,不过在查找错误日志之前,我们可以通过elasticsearch的cat api简单判断下各个节点的状态,包 ...
- Elasticsearch for python API模块化封装
Elasticsearch for python API模块化封装 模块的具体功能 检测Elasticsearch节点是否畅通 查询Elasticsearch节点健康状态 查询包含的关键字的日志(展示 ...
- Springboot整合elasticSearch的官方API实例
前言:在上一篇博客中,我介绍了从零开始安装ElasticSearch,es是可以理解为一个操作数据的中间件,可以把它作为数据的存储仓库来对待,它具备强大的吞吐能力和计算能力,其基于Lucene服务器开 ...
- Elasticsearch中JAVA API的使用
1.Elasticsearch中Java API的简介 Elasticsearch 的Java API 提供了非常便捷的方法来索引和查询数据等. 通过添加jar包,不需要编写HTTP层的代码就可以开始 ...
- elasticsearch【cat API,系统数据】指令汇总
本博文讲述的ES获取系统数据的API是基于Elasticsearch 2.4.1版本的. 0. overview a. 下面将要介绍的所有的指令,都支持一个查询参数v(verbose),用来显示详细的 ...
- Elasticsearch使用REST API实现全文检索
通过rest api添加检索数据,阅读官方文档可以发现,elasticsearch支持动态映射,但是其中有不少问题,且听慢慢详解. 本文主要讲述三点内容: 1 Elasticsearch常用的rest ...
- 【重新分配分片】Elasticsearch通过reroute api重新分配分片
elasticsearch可以通过reroute api来手动进行索引分片的分配. 不过要想完全手动,必须先把cluster.routing.allocation.disable_allocation ...
- ElasticSearch 2 (4) - API Convention
ElasticSearch 2.1.1 (4) - API Convention The elasticsearch REST APIs are exposed using JSON over HTT ...
- elasticsearch 6.0java api的使用
elasticsearch 6.0 中java api的使用 1:使用java api创建elasticsearch客户端 package com.search.elasticsearch; impo ...
随机推荐
- 小鸟初学Shell编程(八)环境变量、预定义变量与位置变量
环境变量 环境变量:每个Shell打开都可以获得到的变量. 我们知道通过export的方式打开可以让子进程读取父进程的变量的值,那怎么样才能让每一个进程都能读取到变量的值呢? 在这呢,系统有一些默认的 ...
- mysql判断是否包含某个字符的方法
mysql判断是否包含某个字符的方法用locate 是最快的,like 最慢.position一般实战例子:select * from historydatawhere locate('0',open ...
- CoreData数据库搭建
1.首先创建父类吧重用的代码写在里边 #import <Foundation/Foundation.h> #import <CoreData/CoreData.h> @inte ...
- 修改host指定域名指向ip,Windows脚本与Linux脚本
修改host指定域名指向ip,Windows脚本与Linux脚本 一,Windows系统修改hosts文件 Windows系统下hosts文件位置:C:\Windows\System32\driver ...
- CentOS 7上安装Docker
目录 安装步骤 1.查看Docker的版本 2.安装 Docker 3.启动Docker 4.设置为开启启动 5.查看Docker安装信息 6.使用Docker 中国加速器 安装步骤 安装操作系统 ...
- JS高阶---对象
四个问题 问题拓展:对象访问方式 1.属性名包含特殊字符,例如空格.-等 2.变量名不确定 变量名不确定时需要使用['属性名'] .
- 几个python编程例子
作业 有如下值集合[11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中,结果为{'k1': ...
- 唐敬博-201871010118 《面向对象程序设计(java)》第六、七周学习总结
在博客园撰写博客(随笔),总结6-7周学习内容(包括实验内容),作业格式要求如下: 博文名称:学号-姓名<面向对象程序设计(java)>第四周学习总结(1分) 博文正文开头格式:(2分) ...
- 201871010134-周英杰《面向对象程序设计(java)》第十五周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- 代码审计-md5()函数
<?php error_reporting(0); $flag = 'flag{test}'; if (isset($_GET['username']) and isset($_GET['pas ...