关于Elasticsearch 的介绍,可以参考之前的文章:
Elasticsearch和Kibana最新版(v7.3.0)下载、安装、启动(WINDOWS)
Beats:Elasticsearch 的数据采集器-快速入门
最新版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,查询索引记录,在控制台上也会显示上述信息。
本文暂时没有评论,来添加一个吧(●'◡'●)