关于配置有两种一种面向传统的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提供了各种特色的接口:
Repository模式提供了一种利用方法名称进行条件构造的查询方式。
这种方式好处就是语义化,坏处就是方法名称可能非常的长。对于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开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!