扯淡:

Spring Data Elasticsearch 是spring data对elasticsearch进行的封装。所以在springboot项目中使用es非常方便,直接在 dao 接口继承 ElasticsearchRepository,即可使用内部封装好的API,这种方式类似spring data jpa、以及前面涉及到的MongoDB。另外一种方式,在项目中使用@Autowired注入ElasticsearchTemplate,然后完成相应操作。本文采用spring data 项目。ES相关插件的安装使用参看【上一章】。

个人学习总结:
链接:【springboot、springcloud、docker 等,学习目录】

使用:

依赖、配置:

1、pom:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2、application.yml

server:port: 8090spring:application:name: esdata:elasticsearch:cluster-nodes: 127.0.0.1:9300repositories:enabled: true

实体类:

1、新建Article文章实体类:

/*** @Auther: xf* @Date: 2019/1/13 18:38* @Description:** indexName: 索引(数据库)* type:类型(表)*/
@Document(indexName = "article", type = "articles")
public class Article {private Long id;@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")private String name;@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")private String content;@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")private String writer;getter/setter...
}

关键:@Document、@Field。

2、@Document注解:

一条记录。

public @interface Document {// 索引库的名称,无默认值String indexName();// 类型(表),建议以实体的名称命名String type() default "";boolean useServerConfiguration() default false;short shards() default 5;short replicas() default 1;// 刷新间隔String refreshInterval() default "1s";// 索引文件存储类型String indexStoreType() default "fs";// 没有索引,是否创建索引boolean createIndex() default true;
}

3、@Field注解:

索引中的域。

public @interface Field {// 字段的类型 自动检测 也可指定具体值FieldType type() default FieldType.Auto;// 该字段是否可以被索引 默认 trueboolean index() default true;DateFormat format() default DateFormat.none;String pattern() default "";// 默认不存储原文boolean store() default false;boolean fielddata() default false;// 搜索时指定的分词器String searchAnalyzer() default "";// 建立索引时指定的分词器String analyzer() default "";String normalizer() default "";String[] ignoreFields() default {};boolean includeInParent() default false;String[] copyTo() default {};
}

Repository:

类似data jpa、MongoDB 中的操作,继承相关的Repository即可具备基本的CRUD操作,复杂的可在接口中按照规则增加方法。

1、dao

/*** 继承 ElasticsearchRepository<实体类, 实体类主键类型>*/
public interface ArticleRepository extends ElasticsearchRepository<Article,Long> {// Pageable为分页使用,不需要分页是去除。    Page<Article> findByName(String name, Pageable pageable);Page<Article> findByNameLike(String name, Pageable pageable);}

2、自定义查询方法:

使用find、By、And、Not等等。参看官网:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/

public interface ArticleRepository extends ElasticsearchRepository<Article,Long> {// Pageable为分页使用,不需要分页是去除。Page<Article> findByName(String name, Pageable pageable);Page<Article> findByNameLike(String name, Pageable pageable);/*** 参考 官网 https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/* 仅仅作为理解,与本项目无关*//* 以Name 开头 */List<Book> findByNameStartingWith(String name);/* 以Name 结尾 */List<Book> findByNameEndingWith(String name);/* 包含 Name */List<Book> findByNameContaining(String name);/* 年龄在 ageFrom 到 ageTo 之间 */List<Book> findByAmountBetween(Integer amountFrom, Integer amountTo);/* 名称为name 和 价格为 price 的 */List<Book> findByNameAndPrice(String name, Integer price);/* 名称为name 和 价格为 price 的 按照价格排序 */List<Book> findByNameAndPriceOrderByPriceDesc(String name, Integer price);}

Controller、Service:

较简单,下面为搜索结果分页,完整代码下载源码。

​// controller
@RestController
public class ArticleController {@AutowiredArticleService articleService;@GetMapping(value = "article/query")public ApiResult query(@RequestParam(value = "pageNumber",required = false, defaultValue = "1") int pageNumber,@RequestParam(value = "pageSize",required = false, defaultValue = "10") int pageSize,@RequestParam(value = "searchContent") String searchContent){Page<Article> query = articleService.query(pageNumber, pageSize, searchContent);return ApiResult.ok(query.getContent());}}// service
@Service
public class ArticleService {@AutowiredArticleRepository articleRepository;public Page<Article> query(int pageNumber, int pageSize, String searchContent) {// 分页PageRequest pageRequest = PageRequest.of(pageNumber - 1, pageSize);Page<Article> articles = articleRepository.findByNameLike(searchContent, pageRequest);return articles;}}
​

测试:

1、ES中已添加数据

2、查询:http://127.0.0.1:8090/article/query?searchContent=电视剧我的团长&pageSize=10

至此,springboot 项目使用spring data elasticsearch实现es 的操作完成。

总结:

1、@Document、@Feign的使用
2、使用spring data elasticsearch,dao接口继承ElasticsearchRepository即可使用CRUD操作的API,复杂操作可按照规则定义方法。
3、ES的实际使用中增删改操作较少,重点是查询。ES的索引和数据库的同步一般不会使用API操作。下章将将诶是

TIP:

ES的实际使用中增删改操作较少,重点是查询,ES的索引和数据库的同步一般不会使用API操作,而是使用工具操作。

代码地址:

https://gitee.com/cpla026/springboot-account2/tree/master/springboot2_parent/springboot2_article_elasticsearch


个人学习分享
更多 springboot、springcloud、docker 文章,关注微信公众号吧:

SpringBoot207 - 集成 spring data elasticsearch相关推荐

  1. Elasticsearch 实战1:ES 项目实战(一)Java 集成 Spring Data Elasticsearch(一):简介及环境搭建

    一:前语 1.项目文档 CSDN 专栏:<Elasticsearch 入门和项目实战> 博客路径: https://blog.csdn.net/a767815662/category_91 ...

  2. Spring系列学习之Spring Data Elasticsearch数据访问

    英文原文:https://spring.io/projects/spring-data-elasticsearch 目录 概述 特性 快速开始 学习 文档 概述 Elasticsearch的Sprin ...

  3. Lucene 和 Kibana、ElasticSeach、Spring Data ElasticSearch

    什么是全文检索 数据分类 生活中的数据总体分为两种:结构化数据和非结构化数据. 结构化数据 - 行数据,可以用二维表结构来逻辑表达实现的数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结 ...

  4. Spring Data ElasticSearch 3.2版本发布,相关新特性说明

    由于ElasticSearch更新的速度非常的快,那么就造成了一些常见的Java交互API更新速度无法匹配最新的版本等情况,比如Spring Data ElasticSearch.对于习惯了使用其他类 ...

  5. 【javaWeb微服务架构项目——乐优商城day07】——Elasticsearch介绍和安装及使用(安装kibana,安装ik分词器,Spring Data Elasticsearch,高级查询)

    文章目录 0.学习目标 1.Elasticsearch介绍和安装 1.1.简介 1.1.1.Elastic 1.1.2.Elasticsearch 1.1.3.版本 1.2.安装和配置 1.2.1.新 ...

  6. Spring Data Elasticsearch聚合搜索实战

    准备环境 1 安装Elasticsearch 5.5.2 (略) 2 使用爬虫爬取厦门人才网相关招聘信息(略) 通过elasticsearch-head插件可以看到我们已经爬取很多数据了 3 在项目中 ...

  7. 通过Spring Data Elasticsearch操作ES

    Elasticsearch Elasticsearch (ES)是一个基于Lucene构建的开源.分布式.RESTful 接口全文搜索引擎.Elasticsearch 还是一个分布式文档数据库,其中每 ...

  8. Spring MVC集成Spring Data Reids和Spring Session实现Session共享

    说明:Spring MVC中集成Spring Data Redis和Spring Session时版本是一个坑点,比如最新版本的Spring Data Redis已经不包含Jedis了,需要自行引入. ...

  9. Spring data elasticsearch的使用

    Spring data elasticsearch的使用 ArticleService package cn.zxl.service;import java.util.List;import org. ...

最新文章

  1. 不懂复盘,十年经验等于零
  2. SAP QM初阶之明明存在检验计划但是生成的检验批取不到?
  3. 千万别在UI线程上调用Control.Invoke和Control.BeginInvoke,因为这些是依然阻塞UI线程的,造成界面的假死...
  4. hdu 2830(矩形dp)
  5. 战略模式并不意味着春天!
  6. 一文透析 Spring Boot、微服务架构和大数据治理三者之间的故事
  7. 扩大Eclipse的内存
  8. 微信小程序项目实战之豆瓣天气
  9. Apache Dril l和 Prestodb是合并多租数据源户统一查询
  10. HubbleDotNet 基本语法
  11. oracle对星期排序,oracle rownum对排序的影响
  12. 73种网页常用js代码
  13. 23种设计模式极速记忆法(全网独一无二)
  14. Source Files 与 Resource Files 的区别
  15. 会员管理系统实战开发教程(三)-充值记录功能
  16. vue webpack打包名称设置
  17. 打印100以内的质数
  18. MATLAB科学绘图-MATLAB画图技巧与实例(一):常用函数
  19. imagenet 1000分类
  20. 微服务系列:Nacos的搭建演武版(单机+集群+监控)

热门文章

  1. 涉密计算机存储介质管理制度,【涉密介质管理】_涉密存储介质保密管理规定...
  2. android list集合遍历,Java list集合遍历操作遇到的问题
  3. 用python合并视频--将几段视频合并成一个
  4. 公开课视频(七):最强中文NLP预训练模型艾尼ERNIE官方揭秘
  5. 锐龙r7 5800X和i9 10900k 哪个好
  6. 论文翻译之——《基于XGBoost的房价预测优化》-陶然
  7. 数据结构(c语言) 多维数组和矩阵
  8. NVIDIA之获取设备序列号代码加密
  9. 深度学习显卡性能对比与选购,性能对比和性价比对比
  10. OpenJ_Bailian - 2786 Pell数列