springboot整合elasticsearch实现增删改查,elasticsearch学习二

灰太狼 2021-08-28 16:30 856阅读 0赞

前提:首先当然是配置好es的环境,可以参考我的上一篇博客https://blog.csdn.net/weixin_39025362/article/details/105359306
Elasticsearch Java API 大致分如下四类:

  • TransportClient
  • RestClient
  • Jest
  • Spring Data Elasticsearch
    笔者在本篇中主要会和大家讲Spring Data,因为使用springdata jpa操作比较方便简单

1.创建springboot工程,引入es和lombok的maven依赖,添加yml配置

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  4. </dependency>
  5. <!--lombok是创建实体类通过注解@Data为实体创建get、set、toString等方法,使我们的实体类非常简洁-->
  6. <dependency>
  7. <groupId>org.projectlombok</groupId>
  8. <artifactId>lombok</artifactId>
  9. <optional>true</optional>
  10. </dependency>
  11. spring
  12. #------------------------ elasticsearch -----------------------------
  13. main:
  14. allow-bean-definition-overriding: true
  15. data:
  16. elasticsearch:
  17. repositories:
  18. enabled: true
  19. cluster-name: elasticsearch
  20. cluster-nodes: 127.0.0.1:9300

2,创建es的索引库

1.可以通过postman或者head插件来创建索引库,笔者使用的是es6.2.4
以下介绍使用postman创建es索引库,put请求,url:http://localhost:9200/test-search
像mysql一样描述的话,就是创建一个名字叫做test-search的数据库,然后一个叫article的数据表,
有三个字段,id long类型,title text类型 使用ik分词搜索,content text类型,使用ik分词搜索

  1. {
  2. "settings": {
  3. "index.number_of_shards": 1,
  4. "index.number_of_replicas": 0,
  5. "index.refresh_interval": "-1"
  6. },
  7. "mappings": {
  8. "article": {
  9. "properties": {
  10. "id": {
  11. "type": "long",
  12. "index": false
  13. },
  14. "title": {
  15. "type": "text",
  16. "analyzer": "ik_max_word",
  17. "search_analyzer": "ik_max_word"
  18. },
  19. "content": {
  20. "type": "text",
  21. "analyzer": "ik_max_word",
  22. "search_analyzer": "ik_max_word",
  23. "boost": 1.5
  24. }
  25. }
  26. }
  27. }
  28. }

在这里插入图片描述
索引库创建成功
在这里插入图片描述

3,回到springboot的工程,开始写代码

1.创建一个叫article的实体类,其中的注解代表的含义分别是:

  • @Document: 代表一个文档记录 ,indexName: 用来指定索引名称, type: 用来指定索引类型
  • @Id: 用来将对象中id和ES中_id映射
  • @Field: 用来指定ES中的字段对应Mapping,其中的type: 用来指定ES中存储类型,analyzer: 用来指定使用哪种分词器

  1. @Data
  2. @Document(indexName = "test-search",type = "article",shards = 1,replicas = 0, refreshInterval = "-1")
  3. public class Article implements Serializable {
  4. @Id
  5. private Long id;
  6. @Field(type = FieldType.Text,analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")
  7. private String title; //标题
  8. @Field(type = FieldType.Text,analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")
  9. private String content;// 缩略内容
  10. }

2.dao层,创建一个ArticleRepository的接口,继承ElasticsearchRepository

  1. public interface ArticleRepository extends ElasticsearchRepository<Article,Long> {
  2. /** * 使用jpa的一个好处就是你想联合title和content去搜索,它就会有方法出现,使用pageable分页 * @param title * @param content * @param pageable * @return */
  3. Page<Article> findByTitleLikeOrContentLike(String title, String content, Pageable pageable);
  4. /** * 根据article的content内容去搜索,使用pageable份额有 * @param content * @param pageable * @return */
  5. Page<Article> findByContentLike(String content, Pageable pageable);
  6. }

3.service层,

  1. @Service
  2. public class ArticleService {
  3. @Autowired
  4. private ArticleRepository articleRepository;
  5. public void save(Article article){
  6. articleRepository.save(article);
  7. }
  8. public Page<Article> search(String title, String content, Pageable pageable){
  9. return articleRepository.findByTitleLikeOrContentLike(title,content,pageable);
  10. }
  11. public Page<Article> search(String content,Pageable pageable){
  12. return articleRepository.findByContentLike(content,pageable);
  13. }
  14. public Page<Article> findAll(Pageable pageable){
  15. return articleRepository.findAll(pageable);
  16. }
  17. }

4,controller

  1. @RestController
  2. public class ArticleController {
  3. @Autowired
  4. private ArticleRepository articleRepository;
  5. @Autowired
  6. private ArticleService articleService;
  7. //可以插入单条也可以多条
  8. @RequestMapping("/articleSave")
  9. public String save(){
  10. List<Article> articles = new ArrayList<>();
  11. articles.add(new Article(System.currentTimeMillis(),"小米",
  12. "小米手机"));
  13. articles.add(new Article(System.currentTimeMillis(),"华为",
  14. "华为手机"));
  15. for(int i=0; i<articles.size(); i++){
  16. articleRepository.save(articles.get(i));
  17. System.out.println(articles.get(i));
  18. }
  19. return "success";
  20. }
  21. @RequestMapping("/search")
  22. public String search(HttpServletRequest request){
  23. int pageNum = 0;
  24. int pageSize = 10;
  25. String title = request.getParameter("title");
  26. String content = request.getParameter("content");
  27. Pageable pageable = PageRequest.of(pageNum,pageSize);
  28. Page<Article> articles = articleService.search(title,content,pageable);
  29. return articles.toString();
  30. }
  31. }

5.其实只要集成了jpa他的增删改查就会变得特别简单,只要一点就会有提示

在这里插入图片描述

我们可以试着删除一下1001

在这里插入图片描述
在这里插入图片描述
然后1001就被删除了
在这里插入图片描述

然后我们测试一下搜索

在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,856人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Elasticsearch增删

    Elasticsearch的增删改查: 面向文档 document数据格式 1. 应用系统的数据结构都是面向对象的,复杂的 2. 对象数据存储到数据库中,只能拆

    相关 Elasticsearch增删

    面向文档 document数据格式 1. 应用系统的数据结构都是面向对象的,复杂的 2. 对象数据存储到数据库中,只能拆解开来,变为扁平的多张表,每次查询的时候还得