专业的编程技术博客社区

网站首页 > 博客文章 正文

Elasticsearch 6.4.3 和Spring Boot 2.1.7集成-实战演练完整代码

baijin 2024-08-26 10:19:50 博客文章 4 ℃ 0 评论

关于Elasticsearch 的介绍,可以参考之前的文章:

Elasticsearch和Kibana最新版(v7.3.0)下载、安装、启动(WINDOWS)

Elasticsearch 术语介绍和CRUD实际操作入门

Beats:Elasticsearch 的数据采集器-快速入门

最新版Elasticsearch 7.x入门操作

最新版Elasticsearch 7.x master 主节点找不到或者还没有选举?

Elasticsearch Head Chrome浏览器插件安装和使用(最新版7.x)

订单中心基于Elasticsearch 7.x构建订单查询服务

下面具体演示Elasticsearch 6.4.3 和Spring Boot 2.1.7集成-实战演练的详细截图和操作步骤。

一、使用IntelliJ IDEA 创建Spring Boot、Maven项目

如下图所示,选择Spring Initializr选项。

二、在New Project窗口填写项目元数据

如Group、Artifact等等信息。

三、选择相关的依赖项

根据实际项目的需要,选择相关的依赖项。这样,需要注意2点。

(1)Spring Boot的版本,选择新版 2.1.7;

(2)选择NoSQL/Spring Data Elasticsearch依赖项(必选项,其他可选);

四、项目模块创建完成

下面是项目创建完成之后,删除一些无用的maven 文件和目录。

五、编写具体演示代码

(1)首先,在项目中添加application.yml 配置文件,如下所示。

其中,需要说明的是 cluster-nodes 节点,配置为本地 127.0.0.1:7300。

9200 端口是用来让HTTP REST API来访问ElasticSearch,而9300端口是传输层监听的默认端口。

spring.data.elasticsearch.cluster-name Elasticsearch 集群名。(默认值: elasticsearch)

注意:cluster.name需要与Elasticsearch安装目录下config/elasticsearch.yml中的cluster.name一致(默认也是elasticsearch)

spring.data.elasticsearch.cluster-nodes 集群节点地址列表,用逗号分隔。如果没有指定,就启动一个客户端节点。

spring.data.elasticsearch.propertie 用来配置客户端的额外属性。 spring.data.elasticsearch.repositories.enabled 开启 Elasticsearch 仓库。(默认值:true。)

(2)写一个简单的TestController.java,验证Spring Boot 项目工作正常。

启动Spring Boot演示项目,访问 http://localhost:8088/hello,如工作正常,则返回 hello world 字样。

此时,证明 Spring Boot 演示项目工作正常。

(3)创建Model包中的实体类

演示项目背景:每个文章(Article)都要属于一个教程(Course),而且每个文章都要有一个作者(Author)。

Course.java

package com.rickie.elasticsearch.demo.model;

import java.io.Serializable;

public class Course implements Serializable {

private Long id;

private String name;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "Course{" +

"id=" + id +

", name='" + name + '\'' +

'}';

}

}

Author.java

package com.rickie.elasticsearch.demo.model;

import java.io.Serializable;

public class Author implements Serializable {

private Long id;

private String name;

private String remark;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getRemark() {

return remark;

}

public void setRemark(String remark) {

this.remark = remark;

}

@Override

public String toString() {

return "Author{" +

"id=" + id +

", name='" + name + '\'' +

", remark='" + remark + '\'' +

'}';

}

}

Article.java

package com.rickie.elasticsearch.demo.model;

import org.springframework.data.annotation.Id;

import org.springframework.data.elasticsearch.annotations.Document;

import java.io.Serializable;

import java.util.Date;

@Document(indexName = "articles", shards = 5, replicas = 1)

public class Article implements Serializable {

@Id

private Long id;

private String title;

private String abstracts;

private String content;

private Date postTime;

private Long clickCount;

private Author author;

private Course course;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getAbstracts() {

return abstracts;

}

public void setAbstracts(String abstracts) {

this.abstracts = abstracts;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

public Date getPostTime() {

return postTime;

}

public void setPostTime(Date postTime) {

this.postTime = postTime;

}

public Long getClickCount() {

return clickCount;

}

public void setClickCount(Long clickCount) {

this.clickCount = clickCount;

}

public Author getAuthor() {

return author;

}

public void setAuthor(Author author) {

this.author = author;

}

public Course getCourse() {

return course;

}

public void setCourse(Course course) {

this.course = course;

}

@Override

public String toString() {

return "Article{" +

"id=" + id +

", title='" + title + '\'' +

", abstracts='" + abstracts + '\'' +

", content='" + content + '\'' +

", postTime=" + postTime +

", clickCount=" + clickCount +

", author=" + author +

", course=" + course +

'}';

}

}

(4)创建dao 包中的接口

ArticleSearchRepository.java

package com.rickie.elasticsearch.demo.dao;

import com.rickie.elasticsearch.demo.model.Article;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface ArticleSearchRepository extends ElasticsearchRepository<Article, Long> {

}

(5)创建controller 包中的控制器

2个简单的方法,一个是add,向Elasticsearch索引中添加一条记录;另外一个query,查询索引中的记录并输出到控制台。

package com.rickie.elasticsearch.demo.controller;

import com.rickie.elasticsearch.demo.dao.ArticleSearchRepository;

import com.rickie.elasticsearch.demo.model.Article;

import com.rickie.elasticsearch.demo.model.Author;

import com.rickie.elasticsearch.demo.model.Course;

import org.elasticsearch.index.query.QueryStringQueryBuilder;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

import java.util.Date;

import java.util.Iterator;

@RestController

public class EsController {

@Autowired

private ArticleSearchRepository articleSearchRepository;

@RequestMapping("/add")

public void saveArticleIndex(){

Author author = new Author();

author.setId(1L);

author.setName("Rickie Li");

author.setRemark("Sr. Java Developer");

Course course = new Course();

course.setId(1L);

course.setName("elastic stack v7.x");

Article article = new Article();

article.setId(1L);

article.setTitle("install elasticsearch v7.3");

article.setAbstracts("welcome to elastic stack v7.x");

article.setCourse(course);

article.setAuthor(author);

article.setContent("content ...");

article.setPostTime(new Date());

article.setClickCount(100L);

articleSearchRepository.save(article);

}

@RequestMapping("/query")

public void queryArticle() {

String queryString = "elasticsearch";

QueryStringQueryBuilder builder = new QueryStringQueryBuilder(queryString);

Iterable<Article> searchResult = articleSearchRepository.search(builder);

Iterator<Article> iterator = searchResult.iterator();

while(iterator.hasNext()) {

System.out.println(iterator.next());

}

System.out.println("=== end === " + LocalDateTime.now().toString());

}

}

六、测试

在浏览器上输入URL:http://localhost:8080/add。

然后,通过 Chrome 浏览器的Elasticsearch head插件,查看索引中的记录。

关于Elasticsearch Head Chrome插件的安装和使用,可以参考小编如下文章:

Elasticsearch Head Chrome浏览器插件安装和使用(for Elasticsearch 7.x)

在浏览器上输入URL:http://localhost:8080/query,查询索引记录,在控制台上也会显示上述信息。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表