04-springboot整合elasticsearch初识-简单增删改查及复杂排序,分页,聚合操作
前面大概了解了一下elasticsearch的数据存储和数据的查询。现在学习一下,es的复杂操作。
官网相关文档地址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/7.x/java-docs-delete-by-query.html
spring boot提供的Elasticsearch 的Data查询:https://docs.spring.io/spring-data/elasticsearch/docs/4.0.1.RELEASE/reference/html/#repositories.definition
1.简单操作
前面介绍了es的简单使用,现在梳理一下,通常工作使用中,用到的增删改查功能。
通过继承ElasticsearchRepository接口,通过提供的模板方法进行操作。AbstractElasticsearchRepository类已经帮我们封装好了常用的增删改查的方法,我们只要调用就行。
本质也是通过springboot 提供的es的操作类进行操作。eg:
@Override
public Page<T> findAll(Pageable pageable) {
SearchQuery query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withPageable(pageable).build();
return elasticsearchOperations.queryForPage(query, getEntityClass());
}
private void createIndex() {
elasticsearchOperations.createIndex(getEntityClass());
}
private void putMapping() {
elasticsearchOperations.putMapping(getEntityClass());
}
1.新增和修改
都是用封装好的index方法进行操作。
@Test
public void updateEntity(){
Person person = Person.builder().id("66666").name("六哥ya!!!").age(19).build();
Person p = repository.index(person);
p= repository.findById("66666").get();
log.info("=========================== {} ==================",p);
}
2.查询方法
- 前面介绍的根据,方法名关键字自动生成json
- 用@Query查询的方法
- 使用Elasticsearch提供的方法
ElasticSearch中提供了一些通用的方法:
findAll()
findById()
findAllById()
count();
Page<T> search(QueryBuilder query, Pageable pageable)
3.删除的方法
public void deleteById(ID id)
public void delete(T entity)
deleteAll(Iterable<? extends T> entities)
2.复杂操作
在实际使用中,可能涉及到比较复杂的业务,所以,要了解一下复杂业务情况下,ES在Java中怎么进行操作
1.排序
springboot也提供了排序的封装,但是要注意的是,不能对text进行排序,只能对数字或者字母排序。
除此之外,实体类上要增加注解@Field(fielddata=true)
Sort类提供了排序相关的字段方法,具体可以查看相关类及API文档
public void getList(){
Sort order = Sort.by(new Sort.Order(Sort.Direction.DESC, "age"));
Iterable<Person> all = repository.findAll(order);
for (Person person : all) {
log.info("==============={}================",person);
}
}
2.分页
repository存储库提供的查询方法
@Test
public void getPageList() throws JsonProcessingException {
// PageRequest age = PageRequest.of(1, 10, Sort.Direction.ASC, "age");
PageRequest of = PageRequest.of(1, 10);
MatchAllQueryBuilder query = QueryBuilders.matchAllQuery();
Page all = repository.findAll(of);
Page search = repository.search(query, of);
log.info("==============={}================", JsonMapperUtil.toString(all));
log.info("==============={}================", JsonMapperUtil.toString(search));
}
es java API查询的方法
NativeSearchQuery nq = new NativeSearchQueryBuilder().withPageable(of).build();
Page<Person> people = operations.queryForPage(nq, Person.class);
3.聚合操作
关联查询
@Test
public void getSortList(){
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("by_country").field("country")
.subAggregation(AggregationBuilders.dateHistogram("by_year")
.field("dateOfBirth")
.subAggregation(AggregationBuilders.avg("avg_children").field("children"))
);
NativeSearchQuery query = new NativeSearchQueryBuilder().addAggregation(aggregationBuilder).build();
List<Person> people = operations.queryForList(query, Person.class);
}
最小值/最大值/平均值
04-springboot整合elasticsearch初识-简单增删改查及复杂排序,分页,聚合操作的更多相关文章
- SpringBoot 集成Elasticsearch进行简单增删改查
一.引入的pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- SpringBoot整合MybatisPlus基本的增删改查,保姆级教程
概述 MybatisPlus是国产的第三方插件, 它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动,这里介绍了基本的整合SpringBoot和基础用法. 引入依赖 在项目中 ...
- Springboot整合ElasticSearch进行简单的测试及用Kibana进行查看
一.前言 搜索引擎还是在电商项目.百度.还有技术博客中广泛应用,使用最多的还是ElasticSearch,Solr在大数据量下检索性能不如ElasticSearch.今天和大家一起搭建一下,小编是看完 ...
- ado.net的简单数据库操作(三)——简单增删改查的实际应用
果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...
- Redis:五种数据类型的简单增删改查
Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_ke ...
- 国产化之路-统信UOS + Nginx + Asp.Net MVC + EF Core 3.1 + 达梦DM8实现简单增删改查操作
专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...
- Mybatis实现简单增删改查
Mybatis的简单应用 学习内容: 需求 环境准备 代码 总结: 学习内容: 需求 使用Mybatis实现简单增删改查(以下是在IDEA中实现的,其他开发工具中,代码一样) jar 包下载:http ...
- SpringBoot整合MongoDB JPA,测试MongoRepository与MongoTemplate用法,简单增删改查+高级聚合
源码 地址 -> https://github.com/TaoPanfeng/case/tree/master/04-mongo/springboot-mongo 一 引入依赖 <depe ...
- elasticsearch实例讲解增删改查
1.首先弄明白四个概念 elasticsearch 关系型数据库 index 数据库 type 表 document 行 field 字段 如果刚一开始理解比较困难,那你就在心中默念100遍,10遍也 ...
随机推荐
- java实现第九届蓝桥杯最大乘积
最大乘积 把 1~9 这9个数字分成两组,中间插入乘号, 有的时候,它们的乘积也只包含1~9这9个数字,而且每个数字只出现1次. 比如: 984672 * 351 = 345619872 98751 ...
- Linux 文件特殊权限-Sticky BIT
SBIT粘着位作用 只对目录有效 普通用户对该目录拥有w和x权限,即普通用户可以在此目录有写权限 如果没有粘着位,普通拥有写权限,就可以删除目录下所有文件,包括其他用户创建的文件,一旦有粘着位,只有r ...
- Cordova+ionic+angular 项目从 UIWebView 更换为 WKWebView ,通过IOS审核
当前 cordova-ios 最新版本 5.1.1 新版本 cordova-ios 将删除 UIWebView 代码中的所有引用.WKWebView 将是 Cordova 的默认 Web 视图. ...
- C#基础篇——泛型
前言 在开发编程中,我们经常会遇到功能非常相似的功能模块,只是他们的处理的数据不一样,所以我们会分别采用多个方法来处理不同的数据类型.但是这个时候,我们就会想一个问题,有没有办法实现利用同一个方法来传 ...
- FTP配置多用户多目录多权限
环境介绍 根据开发的需求 要求创建FTP服务器,把前端和后端分开用不同的FTP账号 系统环境 centos 7.4 selinux 关闭 防火墙关闭 安装FTP 很简单就一条命令 yum instal ...
- 95题--不同的二叉搜索树II(java、中等难度)
题目描述:给定一个整数 n,生成所有由 1 ... n 为节点所组成的 二叉搜索树 . 示例如下: 分析:这一题需要对比LeetCode96题来分析:https://www.cnblogs.com/K ...
- Pytest单元测试框架——Pytest+Allure+Jenkins的应用
一.简介 pytest+allure+jenkins进行接口测试.生成测试报告.结合jenkins进行集成. pytest是python的一种单元测试框架,与python自带的unittest测试框架 ...
- rust 神奇的特质
pub trait Summary { fn summarize_author(&self) -> String; fn summarize(&self) -> Strin ...
- 有关 HashMap 面试会问的一切
前言 HashMap 是无论在工作还是面试中都非常常见常考的数据结构. 比如 Leetcode 第一题 Two Sum 的某种变种的最优解就是需要用到 HashMap 的,高频考题 LRU Cache ...
- vue学习第二天:Vue跑马灯效果制作
分析: 1. 给开始按钮绑定一个点击事件 2.在按钮的事件处理函数中,写相关的业务代码 3.拿到msg字符串 4.调用字符串的substring来进行字符串的截取操作 5.重新赋值利用vm实例的特性来 ...