浅谈Spring Data ElasticSearch

Spring Data

Spring Data 帮助我们避免了一些样板式代码,比如我们要定义一个接口,可以直接继承接口ElasticSearchRepository接口,这样Spring Data就帮助我们实现了操作documents基础的CURD方法,在ES里index类似RDBMS里table的概念,documents类似table里datarow的概念,所以ElasticSearchRepository默认已经帮我们实现了操作documents的方法。 类似Spring Jpa,我们也可以根据约定实现自己想要的方法。

Maven dependency


   org.springframework.boot
   spring-boot-starter-data-elasticsearch

配置映射

这里在实体类Product上使用了Document注解,配置了index名称,index就相当于一张表。

@Document(indexName = "productindex")
public class Product {
    @Id
    private String id;

    @Field(type = FieldType.Text, name = "name")
    private String name;

    @Field(type = FieldType.Double, name = "price")
    private Double price;

    @Field(type = FieldType.Integer, name = "quantity")
    private Integer quantity;

    @Field(type = FieldType.Keyword, name = "category")
    private String category;

    @Field(type = FieldType.Keyword, name = "desc")
    private String description;

    @Field(type = FieldType.Date, name = "createdDateTime")
    private LocalDate createdDateTime;

    @Field(type = FieldType.Nested, includeInParent = true)
    private List authors;
}

定义接口

public interface ProductRepository extends ElasticsearchRepository {
    Product findByName(String name);

    Page findByName(String name, PageRequest pageRequest);

    Page findByNameContaining(String name, PageRequest pageRequest);
}

java 配置

@Configuration
@EnableElasticsearchRepositories(basePackages = "com.shanxi.springbootes.repository")
@ComponentScan(basePackages = {"com.shanxi.springbootes"})
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        ClientConfiguration config = ClientConfiguration
                .builder()
                .connectedTo("localhost:9200")
                .build();

        return RestClients.create(config).rest();
    }

    @Bean
    public ElasticsearchRestTemplate elasticsearchRestTemplate(){
        return new ElasticsearchRestTemplate(elasticsearchClient());
    }
}

创建index和documents

Spring Data ElasticSearch默认已经自动帮助我们创建index,我们也可以手动通过程序创建index。

创建和删除index

//创建index
this.elasticsearchRestTemplate.indexOps(Product.class).create();

//删除index
this.elasticsearchRestTemplate.indexOps(Product.class).delete();

创建documents

 @Test
 public void it_should_create_product_documents_successful(){
     List products = new ArrayList<>();

     for(int i =1;i

编辑documents

 @Test
 public void it_should_update_Product_successful(){
    Product product =  this.productRepository.findByName("python1");
    product.setQuantity(15);

    this.productRepository.save(product);

    Assertions.assertEquals(15, product.getQuantity());

 }

删除documents

@Test
public void it_should_delete_Product_successful(){
    Product product = this.productRepository.findById("ygnG3n4B9LwueG0uoDc2").get();
    this.productRepository.delete(product);
}

查询documents

精确查询

 @Test
 public void it_should_call_findBy_successful(){
    Product product = this.productRepository.findByName("python2");

    Assertions.assertEquals(product.getQuantity(),10);
    Assertions.assertEquals(product.getPrice(),30d);
 }

匹配查询

这个方法使用Name模糊查询,并且支持分页。

@Test
public void it_should_call_findByNameContaining_success(){
    Page page = this.productRepository.findByNameContaining("python", PageRequest.of(1,10));
    for (Product product : page.toList()) {
        System.out.println(product.toString());
    }

    Assertions.assertEquals(page.toList().size(),10);
}

Original: https://www.cnblogs.com/sword-successful/p/15898263.html
Author: 歪头儿在帝都
Title: 浅谈Spring Data ElasticSearch

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/541922/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 群晖安装wordpress 外网(域名访问)

    群晖安装wordpress 外网(域名访问) 1.群晖套件安装的不知道咋弄,外网无法访问 2.偷懒访式安装 2.1群晖套件安装wordpress,后删除wordpress,但是不删…

    Java 2023年6月6日
    099
  • 单向链表的介绍和实现思路

    链表在内存中的存储 链表是以节点的方式来存储, 是链式存储 每个节点包含 data 域 和 next 域。next域用来指向下一个节点 链表的各个节点不一定是连续存储的 链表分 带…

    Java 2023年6月16日
    059
  • 并发编程之:JUC并发控制工具

    大家好,我是小黑,一个在互联网苟且偷生的农民工。 在上一期我们讲了Thread.join()方法和CountDownLatch,这两者都可以做到等待一个线程执行完毕之后当前线程继续…

    Java 2023年6月7日
    0116
  • (转) MySQL中的意向锁

    详解 MySql InnoDB 中意向锁的作用 posted on2022-09-29 21:54 茶倌 阅读(9 ) 评论() 编辑 Original: https://www….

    Java 2023年6月8日
    081
  • 反射加缓存,解决不同的业务下调用不同的实现

    根据前端传入不同的支付code,动态找到对应的支付方法,发起支付。我们先定义一个注解。 @Retention(RetentionPolicy.RUNTIME) @Target(El…

    Java 2023年6月14日
    074
  • 【leetcode】239. 滑动窗口最大值

    题目 题解 三种解法 “单调队列”解法 新增、获取最大值 删除 代码 题目 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组…

    Java 2023年6月6日
    076
  • Java连载149-集合类小节

    一、Collection和Collections之间的区别 Collection是一个接口类,是Set和List接口的父接口 Collections是一个工具类,是不应该初始化为一…

    Java 2023年6月13日
    082
  • 浅谈Java正则表达式

    正则表达式我们都知道,它定义了字符串的模式,可以用来搜索、编辑或处理文本。我们在某些特定场景中用起来是非常方便的。它等于是给我们划定了一个范围,让我们可以精准的匹配到我们想要的结果…

    Java 2023年6月7日
    071
  • JUC入门

    参考 1.什么是JUC 1.JUC简介 JUC就是java.util.concurrent工具包的简称,这是一个处理线程的工具包,JDK1.5开始出现的。 2.进程和线程 进程:资…

    Java 2023年6月15日
    077
  • 4、spring+springMVC+mybaits+idea+maven

    1、构建项目结构如下 2、构建项目中的pom.xml文件中的依赖资源,里面包含ajax和分页插件的依赖哦 1 <?xml version="1.0" en…

    Java 2023年6月13日
    067
  • SpringMVC前置复习以及扩展

    ssm:mybatis+Spring+SpringMVC javaSE javaweb 框架 理解的DAO层和Service层 先简单来讲下Dao层,和Service层的概念: S…

    Java 2023年6月14日
    090
  • Java的网络通信

    网络通信概述 网络通信编程的三要素:①IP地址 ②端口号 ③协议 IP常用命令 说明 ipconfig 查看本机ip地址 ping IP地址 检查网络是否连通 本机ip:127.0…

    Java 2023年6月9日
    073
  • SpringBoot切面Aop的demo简单讲解

    前言 本篇文章主要介绍的是SpringBoot切面Aop的demo简单讲解。 SpringBoot Aop 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码。 切…

    Java 2023年5月30日
    0130
  • springboot @Value 获取计算机中绝对路径文件的内容

    默认情况下使用 @Value("aaa.txt") private Resource txtResource; 这样获取到的是项目classpath 下的 aa…

    Java 2023年6月16日
    055
  • 面向对象设计—-软件设计师

    上午12分 下午两大答题 30分 面向对象的基本概念❤❤❤❤❤ 采用面向对象的软件开发,通常由面向对象分析,面向对象设计,面向对象实现 1 面向对象分析OOA: 获取对应用问题的理…

    Java 2023年6月6日
    072
  • webpack快速入门(三):资源管理

    上一章说了基本的webpack是用,包括命令行打包,npm脚本打包等基础的东西。 这篇说一下webpack的资源管理,包括(图片,字体,数据),首先调整一下项目结构成: webpa…

    Java 2023年6月16日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球