浅谈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
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
配置映射
这里在实体类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<Author> authors;
}
定义接口
public interface ProductRepository extends ElasticsearchRepository<Product, String> {
    Product findByName(String name);
    Page<Product> findByName(String name, PageRequest pageRequest);
    Page<Product> 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<Product> products = new ArrayList<>();
     for(int i =1;i<=30;i++){
            Product product =new Product();
            product.setName("python"+i)
                    .setPrice(30d)
                    .setQuantity(10)
                    .setCategory("book"+i)
                    .setDescription("a nice book"+i)
                    .setCreatedDateTime(LocalDate.now())
            ;
            product.setAuthors(Arrays.asList(new Author("李雷"),new Author("韩梅梅")));
            products.add(product);
     }
     this.productRepository.saveAll(products);
     Assertions.assertEquals(products.size(),30);
}
编辑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<Product> 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);
}
浅谈Spring Data ElasticSearch的更多相关文章
- spring data elasticsearch 使用
		很久之前就安装了elasticsearch,一直没用java用过,最近看了一下spring data系列的elasticsearch,这里写一篇心得. 如果尚未安装elasticsearch,可以 参 ... 
- elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)
		一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RE ... 
- Elasticsearch基本用法(2)--Spring Data Elasticsearch
		Spring Data Elasticsearch是Spring Data项目下的一个子模块. 查看 Spring Data的官网:http://projects.spring.io/spring-d ... 
- 浅谈Spring中的Quartz配置
		浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ... 
- Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)
		elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介.Java REST Client.Java Client.Spri ... 
- Spring Boot + Spring Data + Elasticsearch实例
		Spring Boot + Spring Data + Elasticsearch实例 学习了:https://blog.csdn.net/huangshulang1234/article/detai ... 
- 浅谈Spring的两种配置容器
		浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41 作者:黄小鱼ZZZ ... 
- elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词
		elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/rel ... 
- How to provide highlighting with Spring data elasticsearch
		How to provide highlighting with Spring data elasticsearch @Test public void shouldReturnHighlighted ... 
- springboot集成spring data ElasticSearch
		ES支持SpringBoot使用类似于Spring Data Jpa的方式查询,使得查询更加方便. 1.依赖引入 compile “org.springframework.boot:spring-bo ... 
随机推荐
- LaMI-DETR:基于GPT丰富优化的开放词汇目标检测 | ECCV'24
			现有的方法通过利用视觉-语言模型(VLMs)(如CLIP)强大的开放词汇识别能力来增强开放词汇目标检测,然而出现了两个主要挑战:(1)概念表示不足,CLIP文本空间中的类别名称缺乏文本和视觉知识.(2 ... 
- 几张图带你了解.NET String
			String 字符串作为一种特殊的引用类型,是迄今为止.NET程序中使用最多的类型.可以说是万物皆可string 因此在分析dump的时候,大量字符串对象是很常见的现象 string的不可变性 str ... 
- CentOS_7安装docker
			CentOS_7安装docker Install Docker Engine on CentOS 官网文档:https://docs.docker.com/engine/install/centos/ ... 
- .NET 8.0 开源在线考试系统(支持移动端)
			前言 推荐一款基于.NET 8.0 免费开源跨平台在线考试系统,系统不仅支持桌面端,还特别优化了移动端的用户体验. 通过本系统可以轻松搭建自己的在线考试平台,实现随时随地的测试与评估. 本文将详细介绍 ... 
- Chrome 130 版本新特性& Chrome 130 版本发行说明
			Chrome 130 版本新特性& Chrome 130 版本发行说明 一.Chrome 130 版本浏览器更新 1. 新的桌面提示 Chrome 130 引入了一种新的 Toast 样式,用 ... 
- IBM 开源的文档转化利器「GitHub 热点速览」
			上周的热门开源项目,Star 数增长犹如坐上了火箭,一飞冲天.短短一周就飙升了 6k Star 的多格式文档解析和导出神器 Docling,支持库和命令行的使用方式.全新的可视化爬虫平台 Maxun, ... 
- 深度解析:Air780E模组之SIM卡接口电路的设计原理
			 SIM卡接口用于连接SIM卡并读取SIM卡信息,以便在注册4G网络时进行鉴权身份验证,是4G通信系统的必要功能. 合宙低功耗4G模组经典型号Air780E支持两路SIM卡,支持双卡切换,便于设备灵 ... 
- OpenMM的安装与使用
			技术背景 OpenMM是一款基于Python开发的开源分子动力学模拟软件,这几年因为AlphaFold的缘故,使得这个软件的热度有了不少提升.并且可以使用GPU硬件加速,所以性能上也不赖.这里介绍一下 ... 
- 发布一个TCP 吞吐性能测试小工具
			当写完一个TCP服务的时候,是不是很想马上测试一下这个服务的性能,它到底能应付怎样的请求处理,其性能又是怎样呢.相信以下这个小工具能帮到你的小忙,它是基于Beetle实现的一个小工具只需要设置一下参数 ... 
- PHP扩展之Yaconf
			这个是继鸟哥出品的yaf,yar 之后的又一个好用的工具. Yaconf配置管理工具 具体可以看鸟哥的文档: https://www.laruence.com/2015/06/12/3051.htm ... 
