【Elastic|Spring data elasticsearch简单上手 | ES-7版本,springboot 2.4】本来觉得写这个没什么意义,感觉看看别人就够了,再次强调本文的环境:
然鹅,,,,被网上的坑的很惨
2021年1月23日01:51:43的最新配置
spring boot 2.4版本
Elasticsearch的7.10.1版本
如果你环境差距不大,恭喜你,这片文章很适用你
注:本文讲解基础的操作,复杂的查询等可以参考参考spring文档(开个翻译就行了)
如果你是刚刚入门是不是有各种奇怪的情况,你发现你的Spring data elasticsearch好像不能正常用?啰里啰嗦(可以跳过 Spring data elasticsearch是个啥?
恭喜你,本人已经找到了Spring data elasticsearch与Elasticsearch的版本差异问题,参考下文,正常返航
spring data是spring的一个子项目,为了使带伙使用不同的数据源,都有当初那个她的味道。
正文 来个最简单的demo 都用spring data了,建个项目应该会吧,狗头
这是最低项目依赖(Spring data elasticsearch依赖了web模块)
org.springframework.boot
spring-boot-starter-data-elasticsearch
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
>test
配置文件
spring:
elasticsearch:
rest:
uris: localhost:9200
connection-timeout: 1s
read-timeout: 30s
数据类
@Document(indexName = "test_create")
public class D2 {@Id
private Integer id;
@Field
private String title;
public D2() {}public D2(Integer id, String title) {this.id = id;
this.title = title;
}public Integer getId() {return id;
}public String getTitle() {return title;
}@Override
public String toString() {return "D2{" +
"id=" + id +
", title='" + title + '\'' +
'}';
}
}
测试类
@SpringBootTest
public class SimpleOpt {@Autowired
ElasticsearchOperations elasticsearchOperations;
@Test
void testCreateGetD2(){D2 d = elasticsearchOperations.get("1",D2.class);
System.out.println(d);
}
@Test
void testCreatePut(){D2 d=elasticsearchOperations.save(new D2(1, "增加一个"));
System.out.println(d);
}
@Test
void testCreateIndex(){boolean b= elasticsearchOperations.indexOps(D2.class).create();
Assertions.assertTrue(b);
}
}
运行,没问题就成功了
下面谈谈各项细节 首先是配置,
spring连接ES有两种方式,TransportClient与RestHighLevelClient
目前推荐使用RestHighLevelClient ,另一种已经被弃用了(在部分环境有问题)
那么如何配置RestHighLevelClient?
两种办法:配置文件或配置类
配置文件只能配置个基础的设置,如果要多定制一些如Headr,ssl的配置,就要使用配置类了
上面已经给了配置文件,下面把配置类给大家
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {@Bean
@Override
public RestHighLevelClient elasticsearchClient() {final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo("localhost:9200")
//.usingSsl()
//.withProxy("localhost:8888")
//.withPathPrefix("ela")
.withConnectTimeout(Duration.ofSeconds(5))
.withSocketTimeout(Duration.ofSeconds(3))
//. // ... other options
.build();
return RestClients.create(clientConfiguration).rest();
}
}
下面是各项配置的细锁
文章图片
(翻译有点夹,生谷歌传统艺能,各位担待担待)
下面说一下这个实体类
文章图片
@Document标注了一个文档主题,对应了mysql中的库,只有一个表
这里一定要歪一嘴,ES在7版本开始,就逐渐不再支持多个Type了,这也是出现很多版本不适应问题的原因
7版本支持多个type,8版本好像就移除了
文档看这里https://www.elastic.co/cn/blog/moving-from-types-to-typeless-apis-in-elasticsearch-7-0
这是查询的接口http://localhost:9200/test/_doc/1(_doc是默认type)
与此同时,@Document注解也做了相关适应,新版本的注解移除了type字段,好家伙,我xx直接好家伙这个注解目前的作用就是设定一下index的用处最大了(还有个是否自动创建index)
so,
@Document(indexName = “test_create”)就够一般使用了
然后是@Id,Id对应了ES中的id
然后是@Field,可以设定类型,那么等等
Spring data elasticsearch会解析类中的所有字段,除了
@Transient
:默认情况下,存储或检索文档时,所有字段都映射到文档,此注释不包括该字段。然后是怎么用这个框架 建议使用注入
ElasticsearchOperations
接口而不是
ElasticsearchRestTemplate
其实是等效的,但是使用前者更解耦,底层使用哪种实现都可以
ElasticsearchOperations是最近改动了的,里面有一大堆过时方法,一大堆新方法
他拥有修改index、CRUD数据、搜索的功能
上面我们已经给了几个demo
详细内容使用可以看看
https://docs.spring.io/spring-data/elasticsearch/docs/4.1.3/api/
除此之外,我们还能用spring data的风格操作数据
在项目中增加一个接口
@Repository
public interface DataDao extends PagingAndSortingRepository {}
我们就有了CRUD、分页查询的能力,很爽
另外这里的分页查询体系也是spring data的体系,本人觉得有必要看看的,可以用来平时使用
推荐阅读
- Java|Java+Spring 实现任务调度Quartz框架(纯Java实现+Spring实现) 读写Excel
- 长文干货! 一文搞懂IoC的依赖注入
- mybatis|[Spring实战] 整合Spring/SpringMVC/Mybatis(SSM)实现登录功能(带前端)
- #|Shiro学习与笔记
- spring|SpringCloudAlibaba+Vue2.0搭建博客项目
- #|「SpringCloud」08 Config分布式配置中心
- #|「SpringCloud」07 Gateway服务网关
- #|「SpringCloud」09 Bus消息总线
- java精品项目下载|java项目-第42期基于ssm项目源码小区管理物业系统