从零搭建Spring Boot脚手架(7):Elasticsearch应该独立服务

关于配置有两种一种面向传统的Restful:

spring:

elasticsearch:

rest:

逗号分隔的Elasticsearch实例使用的列表

uris: http://localhost:9200

链接超时时间

connection-timeout:

读取超时时间

read-timeout:

ES 用户名

username:

ES 密码

password:

如果你都采用默认的配置,可以什么都不配置,包括uris

另一种面向反应式:

spring:

data:

elasticsearch:

client:

反应式相关的配置

reactive:

端点

endpoints:

connection-timeout:

max-in-memory-size:

socket-timeout:

use-ssl:

username:

password:

这里配合的是Spring Webflux反应式框架,我个人其实更加倾向于此,但是作为目前的主流还是选择了第一种。

务必保证spring.data.elasticsearch.repositories.enabled = true,否则无法使用Spring Data Repository模式。

4. 操作


这里演示面向传统的Restful,一共有两种风格。假如我们向写入了Blog

{

“blogId”: “132435553”,

“blogTitle”: “脚手架集成elasticsearch”,

“author”: “felord”,

“content”: “全称为Object Storage Service,也叫对象存储服务,是一种解决和处理离散单元的方法,可提供基于分布式系统之上的对象形式的数据存储服务,具有可拓展、可管理、低成本等特点,支持中心和边缘存储,能够实现存储需求的弹性伸缩,主要应用于海量数据管理的各类场景。\n\n这概念真是够难以理解的。简单说点我知道的吧,平常我们的文件地址都是 /User/felord/video/xxx.mp4的目录树结构,系统先要找到User,然后一级一级往下找一直到目标为止,这是一种结构化的存储方式。对象存储就不一样了,所有的文件都放在一个特定的池子里,只不过文件的携带有它自己的元信息,通过元信息去检索文件。”,

“url”: “https://felord.cn/my-spring-boot-day7.html”,

“publishedTime”: “2020-08-30T22:17:40”

}

对应的POJO对象为:

/**

  • @author felord.cn

  • @since 2020/8/30 16:10

*/

@Document(indexName = “blogs”)

@Data

public class Blog {

@Id

private String blogId;

private String blogTitle;

private String author;

private String content;

private String url;

@Field(type = FieldType.Date,format = DateFormat.date_hour_minute_second)

private LocalDateTime publishedTime;

}

  • @Document用来标记文档对象,包含了该文档的一些元信息,索引副本数,分片数。

  • @Id 文档的标识符。

  • @Field 文档字段的一些元信息配置,类型、名称、分词器等等。

主要有以上三种,还有其它的一些注解标记,这里不再讲述。

4.1 ElasticsearchRestTemplate

RedisTemplate相信你已经不陌生了,同样的,Spring Data Elasticsearch提供了ElasticsearchRestTemplate来操作Elasticsearch,增删改查应有尽有。这里演示进行复杂的Criteria查询。

从blogs索引中查询blogId为132435553而且包含elastic词汇的标题的文档,同时查询词汇高亮

@Autowired

private ElasticsearchRestTemplate elasticsearchRestTemplate;

@Test

void testTemplate() {

// 构造条件

Criteria criteria = Criteria.where(new SimpleField(“blogId”))

.is(“132435553”)

.and(new SimpleField(“blogTitle”))

.contains(“elastic”);

CriteriaQuery criteriaQuery = new CriteriaQuery(criteria);

// 高亮

HighlightBuilder blogTitle = SearchSourceBuilder.highlight().field(“blogTitle”);

HighlightQuery highlightQuery = new HighlightQuery(blogTitle);

criteriaQuery.setHighlightQuery(highlightQuery);

SearchHits blogSearchHits = elasticsearchRestTemplate.search(criteriaQuery, Blog.class);

blogSearchHits.getSearchHits().forEach(System.out::println);

}

4.2 Spring Data Repository

Spring Data Repository的核心接口是Repository。这个接口需要领域类(比如上面的Blog)跟领域类的ID类型作为参数。这个接口主要是让你能知道继承这个类的接口的类型。CrudRepository提供了对被管理的实体类的一些常用增删改查方法。那么针对Elasticsearch提供了各种特色的接口:

Elasticsearch Repository 接口家族

Repository模式提供了一种利用方法名称进行条件构造的查询方式。

IDEA 提供了智能提示来帮助我们构造方法条件

这种方式好处就是语义化,坏处就是方法名称可能非常的长。对于4.1中的例子我们可以简化为:

/**

  • @author felord.cn

  • @since 2020/8/30 21:32

*/

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
715236129641)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值