测试使用索引库crud和高级查询分页
1.搭建ES的服务
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>配置ES
...
spring:
application:
name: hrm-es-service
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9300 #9200是图形界面端,9300代码端
...
2.创建EmployeeDoc
/**
* 针对于 Employee 表的文档映射
* indexName:索引库
* type:类型(表类型)
*/
@Document(indexName = "hrm" , type = "employee")
public class EmployeeDoc {
//对应文档的id
@Id
private Long id;
@Field(type = FieldType.Keyword) //指定为 不分词
private String userName;
private int age;
@Field(type =FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String intr;
...
3.创建索引库
@RunWith(SpringRunner.class)
@SpringBootTest(classes = EsServiceApplication2050.class)
public class ESTest {
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Test
public void testCreateIndex() {
//创建索引
elasticsearchTemplate.createIndex(EmployeeDoc.class);
//做文档映射
elasticsearchTemplate.putMapping(EmployeeDoc.class);
}
}
4.定义ElasticsearchRepository
@Repository
public interface EmployeeElasticsearchRepository extends ElasticsearchRepository<EmployeeDoc,Long> {}
5.基本CRUD
@Autowired
private EmployeeElasticsearchRepository employeeElasticsearchRepository;
//初始化
@Test
public void testCreateIndex() {
//创建索引
elasticsearchTemplate.createIndex(EmployeeDoc.class);
//做文档映射
elasticsearchTemplate.putMapping(EmployeeDoc.class);
}
//添加数据
@Test
public void testAdd(){
//准备数据
EmployeeDoc employeeDoc = new EmployeeDoc();
employeeDoc.setAge(18);
employeeDoc.setUserName("王大锤");
employeeDoc.setIntr("我爱中国");
//添加数据到es
employeeElasticsearchRepository.save(employeeDoc);
}
//添加数据
@Test
public void testUpdate(){
//准备数据
EmployeeDoc employeeDoc = new EmployeeDoc();
employeeDoc.setId(5L); //有id就是修改
employeeDoc.setAge(18);
employeeDoc.setUserName("周伯通");
employeeDoc.setIntr("深得童子通真传");
//添加数据到es
employeeElasticsearchRepository.save(employeeDoc);
}
//删除数据
@Test
public void testDelete(){
employeeElasticsearchRepository.deleteById(5L);
}
//获取数据
@Test
public void testGet(){
Optional<EmployeeDoc> optional = employeeElasticsearchRepository.findById(5L);
System.out.println(optional.get());
}
6.高级查询分页
//通过索引库,高级查询和分页
/**
* 用户名为 隔壁老王
* age在 10 - 20
* 按照 id排序降序
* 分页 每页 2条 取第一页
*/
@Test
public void testSearchAndPage() throws Exception{
//1.创建查询建造器对象
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
//2.给查询建造器添加查询条件对象
//1.创建组合查询条件对象
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//2.添加查询条件:分词查询:username
List<QueryBuilder> must= boolQuery.must();
must.add(QueryBuilders.matchQuery("username","周伯通" ));
//2.添加查询条件:范围查询:age:10到30
List<QueryBuilder> filter = boolQuery.filter();
filter.add(QueryBuilders.rangeQuery("age").lte(30).gte(10));
//3.给查询建造器添加查询条件对象
queryBuilder.withQuery(boolQuery);
//3.给查询建造器添加分页对象:从第0页开始,每页2条
queryBuilder.withPageable(PageRequest.of(0,2 ));
//4.给查询建造器添加排序
//1.创建排序对象:id,降序
FieldSortBuilder sortBuilder = new FieldSortBuilder("id").order(SortOrder.DESC);
//2.给查询建造器添加排序
queryBuilder.withSort(sortBuilder);
//5.创建查询对象
NativeSearchQuery searchQuery = queryBuilder.build();
//6.传给search方法,执行高级查询分页排序功能,得到分页对象
Page<EmployeeDoc> page = employeeElasticsearchRepository.search(searchQuery);
//7.获取结果
//获得总条数
int totalPages = page.getTotalPages();
System.out.println(totalPages);
//获得当前页数据
Iterator<EmployeeDoc> iterator = page.getContent().iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
测试使用索引库crud和高级查询分页的更多相关文章
- java整合Elasticsearch,实现crud以及高级查询的分页,范围,排序功能,泰文分词器的使用,分组,最大,最小,平均值,以及自动补全功能
//为index创建mapping,index相当于mysql的数据库,数据库里的表也要给各个字段创建类型,所以index也要给字段事先设置好类型: 使用postMan或者其他工具创建:(此处我使用p ...
- 大型运输行业实战_day04_3_高级查询+分页
1.高级查询+分页最终结果 2.分页的本质分析 前端传入:当前页 和 每页显示条数 数据库必须查询出:数据列表 和 总共条数 页面显示包括的数据有: 列表 + 每页显示条数 + 当前页 + 总共 ...
- springboot整合Mangodb实现crud,高级查询,分页,排序,简单聚合
//linux安装mangodb教程:https://www.cnblogs.com/yangxiaohui227/p/11347832.html 1.引入maven 依赖 <dependenc ...
- JAVAEE——宜立方商城07:Linux上搭建Solr服务、数据库导入索引库、搜索功能的实现
1. 学习计划 1.Solr服务搭建 2.Solrj使用测试 3.把数据库中的数据导入索引库 4.搜索功能的实现 2. Solr服务搭建 2.1. Solr的环境 Solr是java开发. 需要安装j ...
- Elasticsearch (1) - 索引库 文档 分词
创建索引库 ES的索引库是一个逻辑概念,它包括了分词列表及文档列表,同一个索引库中存储了相同类型的文档.它就相当于MySQL中的表,或相当于Mongodb中的集合. 关于索引这个语: 索引(名词):E ...
- lucene内存索引库、分词器
内存索引库 特点 在内存中开辟一块空间,专门为索引库存放.这样有以下几个特征: 1) 因为索引库在内存中,所以访问速度更快. 2) 在程序退出时,索引库中的文件也相应的消失了. 3) ...
- (转) 淘淘商城系列——使用SolrJ查询索引库
http://blog.csdn.net/yerenyuan_pku/article/details/72908538 我们有必要在工程中写查询索引库的代码前先进行必要的测试.我们先到Solr服务页面 ...
- (转)淘淘商城系列——使用solrj来测试索引库
http://blog.csdn.net/yerenyuan_pku/article/details/72892280 我们使用solrj来操作索引库,一般习惯先建一个单元测试类测试下增删改查方法是否 ...
- 【Solr】索引库查询界面详解
目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_pric ...
随机推荐
- swoole简介
swoole是PHP的扩展,又不是一个普通的扩展.普通的扩展只是提供一个库函数.而swoole扩展在运行后会接管PHP的控制权,进入事件循环.当IO事件发生后,swoole会自动回调指定的PHP函数. ...
- Provide Several View Variants for End-Users 为最终用户提供多个视图变体
In this lesson, you will learn how to provide several customized variants of the same View, and allo ...
- Git 在同一台机器上配置多个Git帐号
在同一台机器上配置多个Git帐号 By:授客 QQ:1033553122 实践环境 win10 Git-2.21.0-64-bit.exe TortoiseGit-2.8.0.0-64bit.msi ...
- AndroidStudio配置好了so文件运行却报错 java.lang.UnsatisfiedLinkError:
报错截图: 解决方法:在app的build.gradle 下的defaultConfig里面添加过滤即可: ndk { abiFilters 'armeabi' //兼容x86cpu架构 需要什么样的 ...
- oracle创建新用户并授予权限
1.同时按下WIN键+R键打开“运行”,输入cmd,回车进入命令提示符 2.输入“sqlplus”后按下回车键,提示输入用户名,输入“sys as sysdba”,按下回车,输入口令,即四-13中设置 ...
- java之包装类
针对八种基本数据类型定义相应的引用类型--包装类: 有了类的特点,接可以调用类中的方法: 基本数据类型 包装类 boolean Bollean byte Byte short Short int In ...
- EEPROM的概念接口类型及软件实例
基本概念 EEPROM的全称是“电可擦除可编程只读存储器”,即Electrically Erasable Programmable Read-Only Memory.是相对于紫外擦除的rom来讲的.但 ...
- SpringSession header/cookie/attribute存放 session id
SpringSession header/cookie/attribute存放 SessionID(死磕) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长 ...
- Spring中,关于IOC和AOP的那些事
一.spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很 ...
- koa2 从入门到进阶之路 (七)
之前的文章我们介绍了一下 koa koa-static静态资源中间件,本篇文章我们来看一下 koa 中 cookie 和 session 的使用. cookie 是存储于访问者的计算机中的变量.可以让 ...