elasticsearch 的增删改查 json和springboot
时间:2019-01-10
本文章向大家介绍elasticsearch 的增删改查 json和springboot,主要包括elasticsearch 的增删改查 json和springboot使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
首先是json直接的增删该查,在Postman里直接通过Json语句修改ES里的索引
POST 127.0.0.1:9200/people
{
"settings":{
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings":{
"man":{
"properties":{
"name":{
"type":"text"
},
"country":{
"type":"keyword"
},
"age":{
"type":"integer"
},
"date":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
增加一行:
'PUT 127.0.0.1:9200/people/man/1
{
"name" : astronaut
"country" : China
"age":20
"date" : 1998-03-20
}
更新:
POST 127.0.0.1:9200/people/man/1/_update
方法1:
{
"script":{
"lang":"painless",
"inline":"ctx._source.age += 10"
}
}
方法2:
{
"script":{
"lang":"painless",
"inline":"ctx._source.age = params.age",
"params":{
"age":100
}
}
}
删除一行数据:
DELETE 127.0.0.1:9200/people/man/1
查找:
POST 127.0.0.1:9200/people/_search
{
"query":{
"match_all":{}
}
}
{
"query":{
"match":{
"name":"astronaut"
}
}
}
{
"aggs":{
"group_by_age":{
"terms":{
"field":"age"
}
}
}
}
springboot中elasticsearch api的使用:
首先先配置连接:
@Configuration
public class MyConfig {
@Bean
public TransportClient client() throws UnknownHostException {
TransportAddress node = new TransportAddress(
InetAddress.getByName("localhost"),
9300); //elasticsearch的tcp接口
Settings settings = Settings.builder()
.put("cluster.name","astronaut's cluster")
.build();
TransportClient client = new PreBuiltTransportClient(settings);
client.addTransportAddress(node); //如果需要多个节点,直接new node,然后add
return client;
}
}
之后,在controller中实现增删改查:
得到一条数据:
@GetMapping("/get/people/man") //localhost:8080/get/people/man?id=1
@ResponseBody
public ResponseEntity get(@RequestParam(name = "id", defaultValue = "") String id) {
if (id.isEmpty()) {
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
GetResponse result = this.client.prepareGet("people", "man", id)
.get();
if (!result.isExists()) {
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
return new ResponseEntity(result.getSource(), HttpStatus.OK);
}
增加一条数据:
@PostMapping("/add/people/man")
@ResponseBody
public ResponseEntity add(
@RequestParam(name = "name") String name,
@RequestParam(name = "country") String country,
@RequestParam(name = "age") String age,
@RequestParam(name = "date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
Date date
) {
try {
XContentBuilder content = XContentFactory.jsonBuilder()
.startObject()
.field("name", name)
.field("country", country)
.field("age", age)
.field("date", date.getTime())
.endObject();
IndexResponse result = this.client.prepareIndex("people", "man")
.setSource(content)
.get();
return new ResponseEntity(result.getId(), HttpStatus.OK);
} catch (IOException e) {
e.printStackTrace();
return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
删除:
@DeleteMapping("/delete/people/man")
@ResponseBody
public ResponseEntity delete(@RequestParam(name = "id") String id) {
if (id.isEmpty()) {
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
DeleteResponse result = this.client.prepareDelete("people", "man", id).get();
return new ResponseEntity(result.getResult().toString(), HttpStatus.OK);
}
更新:
@PutMapping("/update/people/man")
@ResponseBody
public ResponseEntity update(@RequestParam(name = "id") String id
, @RequestParam(name = "name", required = false) String name
, @RequestParam(name = "country", required = false) String country
, @RequestParam(name = "age", required = false) String age
//, @RequestParam(name = "date", required = false) Date date
) {
UpdateRequest update = new UpdateRequest("people", "man", id);
try {
XContentBuilder builder = XContentFactory.jsonBuilder().startObject();
if (name != null) {
builder.field("name", name);
}
if (country != null) {
builder.field("country", country);
}
if (age != null) {
builder.field("age", age);
}
// if(date!=null){
// builder.field("date", date.getTime());
// }
builder.endObject();
update.doc(builder);
} catch (IOException e) {
e.printStackTrace();
return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
}
try {
UpdateResponse result = this.client.update(update).get();
return new ResponseEntity(result.getResult().toString(), HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
查找(直接查找和范围查找):
@PostMapping("/query/people/man")
@ResponseBody
public ResponseEntity query(@RequestParam(name = "name", required = false) String name,
@RequestParam(name = "country", required = false) String country,
@RequestParam(name = "gt_age", defaultValue = "0") int gtage,
@RequestParam(name = "lt_age", required = false) Integer ltage) {
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
if (name != null) {
boolQuery.must(QueryBuilders.matchQuery("name", name));
}
if (country != null) {
boolQuery.must(QueryBuilders.matchQuery("country", country));
}
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age")
.from(gtage);
if (ltage != null && ltage > 0) {
rangeQuery.to(ltage);
}
boolQuery.filter(rangeQuery);
SearchRequestBuilder builder = this.client.prepareSearch("people")
.setTypes("man")
.setQuery(boolQuery)
.setFrom(0)
.setSize(10);
System.out.println(builder);
SearchResponse response = builder.get();
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
for(SearchHit hit : response.getHits()){
result.add(hit.getSourceAsMap());
}
return new ResponseEntity(result, HttpStatus.OK);
}
- ofbiz实体引擎(四) ModelReader的作用
- ofbiz实体引擎(三) GenericDelegator实例化的具体过程
- 机器学习实战 | 第五章:模型保存(持久化)
- Python编程任务 | 斯坦福CS231n-深度学习与计算机视觉课程
- ofbiz实体引擎(二) delegator实例化具体方式
- ofbiz实体引擎(一) 获取Delegator
- 12个非常实用的JavaScript小技巧
- 关于PHP浮点数精度损失问题
- FreeMarker与JSP 2.0 + JSTL组合进行比较
- 从零开始学设计模式(1):基础编程模式
- 机器学习实战 | 第四章:模型验证和选择
- ofbiz中FreeMarkerWorker的makeConfiguration方法
- 后台进程(守护进程)自动备份PostgreSQL数据库
- 了解这些PHP小技巧吗?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PostgreSQL异常重启postmaster.pid处理
- Codeforce-Ozon Tech Challenge 2020-A. Kuroni and the Gifts
- 洛谷P3360偷天换日(树形DP)
- Java开发编程规范: 2.常量定义
- Codeforces Round #509 (Div. 2) A. Heist 贪心
- CodeForces - 1176A Divide it! (模拟+分类处理)
- Codeforces Round #460 (Div. 2)-A Supermaket(贪心)
- Codeforces Round #561 (Div. 2) A. Silent Classroom(贪心)
- codeforces 1287A -Angry Students(模拟)
- 洛谷 2016 战略游戏(树形DP)
- 洛谷2014 选课(树形DP)树形背包问题
- CF1288C-Two Arrays (DP)
- Java开发编程规范: 1.命名风格
- 图论——Tarjan 初步 DFS序+时间戳+欧拉序
- POJ 1330 Nearest Common Ancestors(裸LCA)