Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询

这篇具有很好参考价值的文章主要介绍了Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

pom.xml引入ElasticSearch

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

application.yml配置

spring:
  elasticsearch:
    uris: 
      - localhost:9200
    username: elastic
    password: password

启动类加入注解@EnableElasticsearchRepositories

@EnableElasticsearchRepositories(basePackages = "com.meta.es.repositories")//repository所在的包路径
@SpringBootApplication
public class SpringBootApplication {
	public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}

ElasticSearchEntity

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.util.Date;

@Data
@Document(indexName = "elastic")//indexName索引名称等价于MySQL的表
public class ElasticSearchEntity {
    @Id
    @Field(type = FieldType.Keyword)//关键字在查询的时候不会被拆分
    private String id;

    @Field(type = FieldType.Text)//字符串对应文本类型
    private String name;

    @Field(type = FieldType.Date, format = DateFormat.date_hour_minute_second_millis)//日期类型
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    private Date createTime;

	@Field(type = FieldType.Boolean)//布尔类型
    private boolean isDelete;
}

Repository类继承ElasticsearchRepository

import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import java.util.List;

//ElasticsearchRepository<实体类,主键类型>
public interface ElasticSearchRepository extends ElasticsearchRepository<ElasticSearchEntity,String> {
    List<ElasticSearchEntity> findByName(String name);
	
	//自定义查询语句
    @Query("{\"match\":{\"name\":\"?0\"}}")
    List<ElasticSearchEntity> findAllByNameUsingAnnotations(String name);
}

ElasticSearchService

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class ElasticSearchService {
    @Resource
    private ElasticSearchRepository elasticSearchRepository;

    /**
     * 新增/修改
     */
    public void save(final ElasticSearchEntity elasticSearchEntity) {
        this.elasticSearchRepository.save(elasticSearchEntity);
    }

    /**
     * 通过ID查询
     */
    public ElasticSearchEntity findById(final String id){
        return this.elasticSearchRepository.findById(id).orElse(null);
    }

    /**
     * 通过ID删除
     */
    public void deleteById(String id){
        this.elasticSearchRepository.deleteById(id);
    }

    /**
     * 通过名称模糊查询
     */
    public List<ElasticSearchEntity> findByName(final String name){
        return this.elasticSearchRepository.findByName(name);
    }

    /**
     * 通过使用注解名称模糊查询
     */
    public List<ElasticSearchEntity> findAllByNameUsingAnnotations(String name){
        return this.elasticSearchRepository.findAllByNameUsingAnnotations(name);
    }

    /**
     * 分页
     * @param size 数量
     */
    public Page<ElasticSearchEntity> findAllByPage(int page,int size){
        //Sort sort = Sort.by(Sort.Order.desc("create_date"));//排序
        //Pageable pageable =PageRequest.of(Integer.parseInt(page), Integer.parseInt(size), sort);
        Sort sort = Sort.by(Sort.Order.desc("createTime"));//根据
        Pageable pageable =PageRequest.of(page, size, sort);
        return this.elasticSearchRepository.findAll(pageable);
    }
}

ElasticSearchController

import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("elasticsearch")
public class ElasticSearchController {
    @Resource
    private ElasticSearchService elasticSearchService;

    /**
     * 新增/修改,如果id一致就修改,否则新增
     * @param elasticSearchEntity 实体类
     */
    @PostMapping
    public void save(@RequestBody final ElasticSearchEntity elasticSearchEntity) {
        elasticSearchService.save(elasticSearchEntity);
    }

    /**
     * 通过ID查询
     * @param id ID
     * @return
     */
    @GetMapping("/{id}")
    public ElasticSearchEntity findById(@PathVariable final String id) {
        return elasticSearchService.findById(id);
    }

    /**
     * 通过ID删除
     * @param id ID
     * @return
     */
    @DeleteMapping("/{id}")
    public boolean deleteById(@PathVariable String id) {
        elasticSearchService.deleteById(id);
        return true;
    }

    /**
     * 通过名称模糊查询
     * @param name 名称
     * @return
     */
    @GetMapping("/name/{name}")
    public List<ElasticSearchEntity> findAllByName(@PathVariable String name) {
        return elasticSearchService.findByName(name);
    }

    /**
     * 使用注释的方式名称模糊查询,即:@Query()注解
     * @param name 名称
     * @return
     */
    @GetMapping("/name/{name}/annotations")
    public List<ElasticSearchEntity> findAllByNameAnnotations(@PathVariable String name) {
        return elasticSearchService.findAllByNameUsingAnnotations(name);
    }

    /**
     * 简单分页查询
     * @param page 起始页,默认从0开始
     * @param size 每页数量
     * @return
     */
    @GetMapping("/page")
    public Page<ElasticSearchEntity> findAllByPage(@RequestParam(name = "page",defaultValue = "0") int page, @RequestParam(name = "size",defaultValue = "10") int size){
        return elasticSearchService.findAllByPage(page,size);
    }

}

测试

查看创建的索引(相当于MySQL的表)
method:GET

localhost:9200/_cat/indices

删除索引
method:DELETE

localhost:9200/{索引名称}

查看索引里的全部数据,elastic是实体类@Document定义的indexName
method:GET

localhost:9200/elastic/_search

新增索引里没有ID就是新增,有ID就是修改
Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询
修改索引里没有ID就是新增,有ID就是修改
Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询
查询
Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询
删除
Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询
分页
Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询
通过name模糊查询
Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询文章来源地址https://www.toymoban.com/news/detail-417314.html

到了这里,关于Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 集成Elasticsearch简单八步

         Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。  Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RE

    2024年02月17日
    浏览(33)
  • Java实战:SpringBoot+ElasticSearch 实现模糊查询

    本文将详细介绍如何使用SpringBoot整合ElasticSearch,实现模糊查询、批量CRUD、排序、分页和高亮功能。我们将深入探讨ElasticSearch的相关概念和技术细节,以及如何使用SpringData Elasticsearch库简化开发过程。 ElasticSearch是一个基于Lucene构建的开源搜索引擎,它提供了一个分布式、多

    2024年04月25日
    浏览(25)
  • Elasticsearch - 聚合获取原始数据并分页&排序&模糊查询

    ES版本: 7.6. 需要按照主机ID 进行告警时间的汇总,并且还得把主机相关的信息展示出来。 注: 所有的数据都存在索引中, 通过一个DSL查询展示 实际上就是将terms聚合的结果以列表形式分页展示。 bucket_sort中 from不是pageNum,如想实现pageNum效果,from=pageNum*size即可; terms聚合

    2024年02月05日
    浏览(36)
  • SpringBoot整合ElasticSearch实现分页查询

    本文使用SpringBoot整合ElasticSearch实现分页查询 还是继续使用spring-boot-starter-data-elasticsearch来实现分页查询操作 数据准备 使用ElasticsearchRestTemplate来实现 程序结果 使用ElasticsearchOperations来实现 程序结果 本文记录了SpringBoot整合ElasticSearch来实现分页查询的两种方式

    2024年01月25日
    浏览(37)
  • ES(Elasticsearch)+SpringBoot实现分页查询

    1.ES介绍   ES作为一个搜索工具,寄托于Lucene之上,提供了方便的数据存储和搜索服务,一般的用它来作为网页数据索引以及存储用户画像(即用户标签)数据,可以提供复具有复杂的查询条件的服务。例如在网页索引中,通过倒排的方式索引的方式,对文档进行分词存储,

    2024年02月16日
    浏览(37)
  • SpringBoot ElasticSearch 实现订单的分页查询 【SpringBoot系列17】

    SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海

    2024年02月09日
    浏览(35)
  • 4、Elasticsearch7.6.1 Java api操作ES(CRUD、两种分页方式、高亮显示)和Elasticsearch SQL详细示例

    1、介绍lucene的功能以及建立索引、搜索单词、搜索词语和搜索句子四个示例实现 2、Elasticsearch7.6.1基本介绍、2种部署方式及验证、head插件安装、分词器安装及验证 3、Elasticsearch7.6.1信息搜索示例(索引操作、数据操作-添加、删除、导入等、数据搜索及分页) 4、Elasticsearch7

    2024年02月16日
    浏览(66)
  • SpringBoot整合Elasticsearch实现分页条件查询及注意事项

    项目环境: springboot 2.3.7.RELEASE es 6.8.3 这里需要注意es中日期格式,ES默认是不支持yyyy-MM-dd HH:mm:ss格式的,需要通过 @Field(type = FieldType.Date, format = DateFormat.custom,pattern = \\\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_second\\\") 来指定日期格式。 直接看业务层实现分页条件查询: 范围查询: es en

    2023年04月16日
    浏览(44)
  • Spring boot 2.3.12集成ElasticSearch7.6.2并进行CRUD

    本篇博客主要讲解Spring boot 2.3.12集成ElasticSearch7.6.2并进行CRUD操作。其它版本的spring boot集成ElasticSearch类似,只需要具体各自的版本是否匹配。通过本篇博客能够成功集成ElasticSearch并进行CRUD操作,适合刚接触ElasticSearch需要进行简单CRUD操作的读者。 在集成ElasticSearch之前需要明

    2023年04月08日
    浏览(41)
  • JavaWeb12(实现基础分页&模糊查询的分页)

    目录 一. 效果预览 ​编辑 二. 实现基本分页 2.1 分页sql  --每页3条  取第二页 --由于伪列不能作用与大于符号也不能作用于between....and --因此需要将伪列-----名列  2.2 万能公式  2.3 首页上一页下一页实现 ②前端代码 2.4 末页实现优化 ①底层代码 ②前端优化  三.实现模糊查询

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包