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的更多相关文章

  1. spring data elasticsearch 使用

    很久之前就安装了elasticsearch,一直没用java用过,最近看了一下spring data系列的elasticsearch,这里写一篇心得. 如果尚未安装elasticsearch,可以 参 ...

  2. 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 ...

  3. Elasticsearch基本用法(2)--Spring Data Elasticsearch

    Spring Data Elasticsearch是Spring Data项目下的一个子模块. 查看 Spring Data的官网:http://projects.spring.io/spring-d ...

  4. 浅谈Spring中的Quartz配置

    浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...

  5. 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 ...

  6. Spring Boot + Spring Data + Elasticsearch实例

    Spring Boot + Spring Data + Elasticsearch实例 学习了:https://blog.csdn.net/huangshulang1234/article/detai ...

  7. 浅谈Spring的两种配置容器

    浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41   作者:黄小鱼ZZZ     ...

  8. elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词

    elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/rel ...

  9. How to provide highlighting with Spring data elasticsearch

    How to provide highlighting with Spring data elasticsearch @Test public void shouldReturnHighlighted ...

  10. springboot集成spring data ElasticSearch

    ES支持SpringBoot使用类似于Spring Data Jpa的方式查询,使得查询更加方便. 1.依赖引入 compile “org.springframework.boot:spring-bo ...

随机推荐

  1. 卧槽,WebStorm现在免费啦!

    前言 就在昨天1024程序员节,JetBrains突然宣布WebStorm现在对非商业用途免费啦.以后大家再也不用费尽心思的去找破解方法了,并且公告中的关于非商业用途定义也很有意思. 关注公众号:[前 ...

  2. linu管理文本文件

    vi\vim编辑器的三种工作模式 命令模式(Command mode):按键编辑器都理解为命令,以命令驱动执行不同的功能.此模型下,不能自由进行文本编辑. 输入模式(Insert mode):也就是所 ...

  3. winform 音乐播放器

    引言 本次项目目的主要为了熟悉axWindowsMediaPlayer,treeview等控件使用,以及学习I/O操作. 技术栈 C# winform 实现效果 设计与实现 使用TreeView实现音 ...

  4. web上线部署系统 Walle

    Walle瓦力是基于git和rsync实现的一个web部署系统工具. 用户分身份注册.登录 开发者发起上线任务申请 管理者审核上线任务 支持多项目部署 快速回滚 部署前准备任务(前置检查) 代码检出后 ...

  5. SSH通过本地开端口打远程隧道

    ssh -R 你想让别人连得端口:带外IP:22 root@内网跳板机 -p内网跳板机端口 例如: ssh -R 8888:172.22.200.1:22 root@10.11.11.11 -p202 ...

  6. 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现五

    一.前言介绍: 1.1 项目摘要 随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势.古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力.然而,在现代社会中 ...

  7. Python 如何根据给定模型计算权值

    在深度学习中,模型权值(或参数)是通过训练过程学习得到的.但是,有时候我们可能需要手动计算或检查这些权值.这通常是在理解模型工作原理.调试.或者进行模型分析时非常有用的. 下面我将通过一个简单的例子, ...

  8. Auto-Encoding Variational Bayes (VAE原文)、变分推理

    变分自动编码器的大致概念已经理解了快一年多了,但是其中的数学原理还是没有搞懂,在看到相关的变体时,总会被数学公式卡住.下决心搞懂后,在此记录下我的理解. 公式推导--变分下界 这篇文章提出一种拟合数据 ...

  9. element ui Tree树形控件获取未全选父节点和子节点id

    Tree树形控件选中状态 在做分配权限的时候如图选择了父节点的某些子节点,现在父节点是半选中状态,使用this.$refs.tree.getCheckedKeys()只能拿到当前的子节点,子节点全选才 ...

  10. (Redis基础教程之八) 如何在Redis中管理Sets

    如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...