浅谈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 ...
随机推荐
- Springboot异步事件配置和使用
Spring中提供了完整的事件处理机制,本身底层内置实现了一些事件和监听,同时支持开发者扩展自己的事件和监听实现. 一般这种基于事件的实现在项目实际开发中我们主要用来解耦,和做异步处理(默认是同步), ...
- Python-提高-2
阅读目录 1.多继承以及MRO顺序 2.再论静态方法和类方法 3.property属性-讲解 4.property属性-应用 5.魔法属性 6.面向对象设计 7.with与"上下文管理器&q ...
- Protues中51单片机按键无法复位(已解决)
前言 昨晚用 Protues 搭建了 51 的最小系统电路,在实物中好用的复位电路,到仿真里不能正常复位了. 51 单片机是高电平复位,所以在运行时 RST 引脚应该是低电平,但在仿真中 RST 引脚 ...
- 在Windows环境下使用AMD显卡运行Stable Diffusion
现在用的电脑是 21 年配的,当时并没有 AI 相关的需求,各种各样的原因吧,抉择后选择了 AMD 的显卡,但在 2024 年的今天,使用 AI 进行一些工作已不再是什么罕见的需求,所以我也想尝试一下 ...
- ABC343:起航
ABC343:起航 2024/3/2/22:53 有点儿晚了,简单总结一下. 前4题都很基础,一点点小思维,其中C题 边界又盲目追求刚刚好,WA了一次,总结经验,程序实际设计应该略微大于数据范围. E ...
- DearPyGui学习
1.所有DPG应用程序必须做3件事: 创建和销毁上下文 (create_context) 创建和显示视区 (create_viewport.show_viewport) 设置和启动DearPyGui ...
- 强行修改 User-Agent, 访问对应的端
location /{ proxy_pass http://localhost:18080; proxy_set_header User-Agent "Mozilla/5.0 (Window ...
- 8.Jenkins+Docker+SpringCloud微服务持续集成
前言 通过前几章的学习,了解了持续集成概念以及相关技术的学习和使用 接下来学习构建一整套SpringCloud微服务+Docker+Jenkins的持续集成案例 环境 架构图 流程说明: 开发人员将代 ...
- Codeforces Round 987 (Div. 2)
Codeforces Round 987 (Div. 2) 总结 A 常见的套路,将一个序列变为不下降序列所需要改变的值的最小数量,考虑最大能保留多少个,显然是求最长上升子序列,而这题给出的 \(a\ ...
- 人工智能模型训练技术:随机失活,丢弃法,Dropout
前一篇:<探索训练人工智能模型的词汇大小与模型的维度> 序言:Dropout 是神经网络设计领域的一种技术,通常我们把它翻译成 随机失活 或者 丢弃法.如果训练神经网络的时候不用 Drop ...