Elastic|Spring data elasticsearch简单上手 | ES-7版本,springboot 2.4

【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与Elasticsearch的版本差异问题,参考下文,正常返航
啰里啰嗦(可以跳过 Spring data 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(); } }

下面是各项配置的细锁
Elastic|Spring data elasticsearch简单上手 | ES-7版本,springboot 2.4
文章图片
(翻译有点夹,生谷歌传统艺能,各位担待担待)
下面说一下这个实体类
Elastic|Spring data elasticsearch简单上手 | ES-7版本,springboot 2.4
文章图片
@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的体系,本人觉得有必要看看的,可以用来平时使用

    推荐阅读