1本文源码 2码云地址:知了一笑 3https://gitee.com/cicadasmile/middle-ware-parent
一、安装和简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
搭建运行环境
Linux系统:centos7下搭建ElasticSearch中间件,常用接口演示
二、与SpringBoot2整合
1、核心依赖
1<dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-data-elasticsearch</artifactId> 4 <version>${spring-boot.version}</version> 5</dependency>
2、配置文件
1spring: 2 application: 3 name: ware-elastic-search 4 data: 5 elasticsearch: 6 # 默认 elasticsearch 7 cluster-name: elasticsearch 8 # 9200作为Http协议,主要用于外部通讯 9 # 9300作为Tcp协议,jar之间就是通过tcp协议通讯 10 cluster-nodes: 192.168.72.130:9300
3、实体类配置
Document 配置
加上了@Document注解之后,默认情况下这个实体中所有的属性都会被建立索引、并且分词。
1indexName索引名称 理解为数据库名 限定小写 2type 理解为数据库的表名称 3shards = 5 默认分区数 4replicas = 1 每个分区默认的备份数 5refreshInterval = "1s" 刷新间隔 6indexStoreType = "fs" 索引文件存储类型
代码块
1@Document(indexName = "requestlogindex",type = "requestlog") 2public class RequestLog { 3 //Id注解Elasticsearch里相应于该列就是主键,查询时可以使用主键查询 4 @Id 5 private Long id; 6 private String orderNo; 7 private String userId; 8 private String userName; 9 private String createTime; 10}
4、数据交互层
实现ElasticsearchRepository接口。
1public interface RequestLogRepository 2extends ElasticsearchRepository<RequestLog,Long> { 3}
5、演示案例
数据增加,修改,查询,排序,多条件查询。
1@Service 2public class RequestLogServiceImpl implements RequestLogService { 3 @Resource 4 private RequestLogRepository requestLogRepository ; 5 @Override 6 public String esInsert(Integer num) { 7 for (int i = 0 ; i < num ; i++){ 8 RequestLog requestLog = new RequestLog() ; 9 requestLog.setId(System.currentTimeMillis()); 10 requestLog.setOrderNo(DateUtil.formatDate(new Date(),DateUtil.DATE_FORMAT_02)+System.currentTimeMillis()); 11 requestLog.setUserId("userId"+i); 12 requestLog.setUserName("张三"+i); 13 requestLog.setCreateTime(DateUtil.formatDate(new Date(),DateUtil.DATE_FORMAT_01)); 14 requestLogRepository.save(requestLog) ; 15 } 16 return "success" ; 17 } 18 @Override 19 public Iterable<RequestLog> esFindAll (){ 20 return requestLogRepository.findAll() ; 21 } 22 @Override 23 public String esUpdateById(RequestLog requestLog) { 24 requestLogRepository.save(requestLog); 25 return "success" ; 26 } 27 @Override 28 public Optional<RequestLog> esSelectById(Long id) { 29 return requestLogRepository.findById(id) ; 30 } 31 @Override 32 public Iterable<RequestLog> esFindOrder() { 33 // 用户名倒序 34 // Sort sort = new Sort(Sort.Direction.DESC,"userName.keyword") ; 35 // 创建时间正序 36 Sort sort = new Sort(Sort.Direction.ASC,"createTime.keyword") ; 37 return requestLogRepository.findAll(sort) ; 38 } 39 @Override 40 public Iterable<RequestLog> esFindOrders() { 41 List<Sort.Order> sortList = new ArrayList<>() ; 42 Sort.Order sort1 = new Sort.Order(Sort.Direction.ASC,"createTime.keyword") ; 43 Sort.Order sort2 = new Sort.Order(Sort.Direction.DESC,"userName.keyword") ; 44 sortList.add(sort1) ; 45 sortList.add(sort2) ; 46 Sort orders = Sort.by(sortList) ; 47 return requestLogRepository.findAll(orders) ; 48 } 49 @Override 50 public Iterable<RequestLog> search() { 51 // 全文搜索关键字 52 /* 53 String queryString="张三"; 54 QueryStringQueryBuilder builder = new QueryStringQueryBuilder(queryString); 55 requestLogRepository.search(builder) ; 56 */ 57 /* 58 * 多条件查询 59 */ 60 QueryBuilder builder = QueryBuilders.boolQuery() 61 // .must(QueryBuilders.matchQuery("userName.keyword", "历张")) 搜索不到 62 .must(QueryBuilders.matchQuery("userName", "张三")) // 可以搜索 63 .must(QueryBuilders.matchQuery("orderNo", "20190613736278243")); 64 return requestLogRepository.search(builder) ; 65 } 66}
三、源代码地址
1GitHub地址:知了一笑 2https://github.com/cicadasmile/middle-ware-parent 3码云地址:知了一笑 4https://gitee.com/cicadasmile/middle-ware-parent