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和高级查询分页的更多相关文章

  1. java整合Elasticsearch,实现crud以及高级查询的分页,范围,排序功能,泰文分词器的使用,分组,最大,最小,平均值,以及自动补全功能

    //为index创建mapping,index相当于mysql的数据库,数据库里的表也要给各个字段创建类型,所以index也要给字段事先设置好类型: 使用postMan或者其他工具创建:(此处我使用p ...

  2. 大型运输行业实战_day04_3_高级查询+分页

    1.高级查询+分页最终结果 2.分页的本质分析 前端传入:当前页  和  每页显示条数 数据库必须查询出:数据列表 和 总共条数 页面显示包括的数据有: 列表 +  每页显示条数 + 当前页 + 总共 ...

  3. springboot整合Mangodb实现crud,高级查询,分页,排序,简单聚合

    //linux安装mangodb教程:https://www.cnblogs.com/yangxiaohui227/p/11347832.html 1.引入maven 依赖 <dependenc ...

  4. JAVAEE——宜立方商城07:Linux上搭建Solr服务、数据库导入索引库、搜索功能的实现

    1. 学习计划 1.Solr服务搭建 2.Solrj使用测试 3.把数据库中的数据导入索引库 4.搜索功能的实现 2. Solr服务搭建 2.1. Solr的环境 Solr是java开发. 需要安装j ...

  5. Elasticsearch (1) - 索引库 文档 分词

    创建索引库 ES的索引库是一个逻辑概念,它包括了分词列表及文档列表,同一个索引库中存储了相同类型的文档.它就相当于MySQL中的表,或相当于Mongodb中的集合. 关于索引这个语: 索引(名词):E ...

  6. lucene内存索引库、分词器

    内存索引库 特点 在内存中开辟一块空间,专门为索引库存放.这样有以下几个特征: 1)    因为索引库在内存中,所以访问速度更快. 2)    在程序退出时,索引库中的文件也相应的消失了. 3)    ...

  7. (转) 淘淘商城系列——使用SolrJ查询索引库

    http://blog.csdn.net/yerenyuan_pku/article/details/72908538 我们有必要在工程中写查询索引库的代码前先进行必要的测试.我们先到Solr服务页面 ...

  8. (转)淘淘商城系列——使用solrj来测试索引库

    http://blog.csdn.net/yerenyuan_pku/article/details/72892280 我们使用solrj来操作索引库,一般习惯先建一个单元测试类测试下增删改查方法是否 ...

  9. 【Solr】索引库查询界面详解

    目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_pric ...

随机推荐

  1. vc6.0 绿色版 下载地址

    最新版的vs2019已经完全不支持生成运行在xp下的应用程序 每次在xp下测试,都需要配置好vc6.0,但乱七八糟的太多了,给出地址,绿色版可用 http://www.downcc.com/soft/ ...

  2. JVM G1垃圾回收算法简要介绍

    JVM G1垃圾回收算法简要介绍 G1的特点 能够像CMS垃圾回收算法一样并发操作应用线程(潜台词:多核) 无需太长时间即可压缩空闲内存空间(潜台词:不会引起太多的GC停顿时间) 尽可能地让GC时长可 ...

  3. 关于华为模拟器eNSP-防火墙USG6000V怎么重装镜像

    一.首先关闭eNSP软件 二.打开Oracle VM VirtualBox 三.单击VirtualBox “管理 - 虚拟介质管理”,将vfw_usg.vdi下面的子链接释放然后删除 四.最后回到主界 ...

  4. ubutu tornado python3.7.5 nginx supervisor 部署web api

    环境: 1.Ubuntu 服务器 2.python3.7.5 安装 1.python3.7.5 安装的话还是比较简单,流程大致是./configure ->make && mak ...

  5. JT/T 808-2013 道路运输车辆卫星定位系统北斗兼容车载终端通讯协议技术规范

    文档下载地址:JT/T 808-2013 道路运输车辆卫星定位系统北斗兼容车载终端通讯协议技术规范

  6. thinkphp6安装报错,composer install tp6 报错 Parse error: syntax error

    composer install thinkphp6 报错 Parse error: syntax error, unexpected ':', expecting '{' in vendor\top ...

  7. [PHP] 编译安装swoole

    不知道为啥,家里的网访问不了pecl.php.net,这也就没有办法直接使用pecl install swoole安装swoole,也可以直接进行编译安装 在git仓库下载源码 https://git ...

  8. Hibernate session.save()实体类,主键增长问题

    实体类如下: package com.wondersgroup.test.entity;   import java.io.Serializable;   import javax.persisten ...

  9. PyCharm 2019 2.3 软件安装教程(1.补丁破解2.破解码)

    一:补丁破解 PyCharm 2019 2.3 下载地址 https://pan.baidu.com/s/1HaWFcbO-x4vZuT6mVC0AGA 提取码:elu7 更多破解教程微信公众号关注“ ...

  10. Python连载54-FTP编程

    一.FTP工作流程 1.客户端链接远程主机上的FTP服务器 2.客户端输入用户名和密码(或者“anonymous”和电子邮件地址) 3.客户端和服务器进行各种文件传输和信息查询操作 4.客户端从远程F ...