个人博客地址: http://www.chenguanting.top
spring-boot-data-elasticsearch
前言:
网上很多人说spring-boot-data-elasticsearch支持es版本过低不推荐使用,我在官网只找到如下版本对应说明,没有关于spring-boot-data对应版本说明就点开本地pom看了下
spring-data-elasticsearchelasticsearch
3.1.x6.2.23.0.x5.5.02.1.x2.4.02.0.x2.2.01.3.x1.5.2
本地pom
<parent>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-parent
</artifactId>
<version>2.1.8.RELEASE
</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-data-elasticsearch
</artifactId>
</dependency>
</dependencies>
点击spring-boot-starter-data-elasticsearch查看对应pom
<dependencies>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter
</artifactId>
<version>2.1.8.RELEASE
</version>
<scope>compile
</scope>
</dependency>
<dependency>
<groupId>org.springframework.data
</groupId>
<artifactId>spring-data-elasticsearch
</artifactId>
<version>3.1.10.RELEASE
</version>
<scope>compile
</scope>
<exclusions>
<exclusion>
<artifactId>jcl-over-slf4j
</artifactId>
<groupId>org.slf4j
</groupId>
</exclusion>
<exclusion>
<artifactId>log4j-core
</artifactId>
<groupId>org.apache.logging.log4j
</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
可以看出spring-boot-data-es是对spring-data-es进行了封装, 本地springboot2.1.8对应spring-data-es3.1.10对应es版本为6.2.2
pom配置
<parent>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-parent
</artifactId>
<version>2.1.8.RELEASE
</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-data-elasticsearch
</artifactId>
</dependency>
</dependencies>
配置文件
spring.application.name=es
server.port=8080
server.servlet.context-path=/es
# Elasticsearch cluster name.
spring.data.elasticsearch.cluster-name=my-es
# Comma-separated list of cluster node addresses.
spring.data.elasticsearch.cluster-nodes=47.11.11.11:9300
# 开启 Elasticsearch 仓库(默认值:true)
spring.data.elasticsearch.repositories.enabled=true
实体类
@Document(indexName
= "book", type
= "_doc")
public class BookBean {
@Id
private String id
;
private String title
;
private String author
;
private String postDate
;
public BookBean(){}
public BookBean(String id
, String title
, String author
, String postDate
){
this.id
=id
;
this.title
=title
;
this.author
=author
;
this.postDate
=postDate
;
}
public String
getId() {
return id
;
}
public void setId(String id
) {
this.id
= id
;
}
public String
getTitle() {
return title
;
}
public void setTitle(String title
) {
this.title
= title
;
}
public String
getAuthor() {
return author
;
}
public void setAuthor(String author
) {
this.author
= author
;
}
public String
getPostDate() {
return postDate
;
}
public void setPostDate(String postDate
) {
this.postDate
= postDate
;
}
@Override
public String
toString() {
return "BookBean{" +
"id='" + id
+ '\'' +
", title='" + title
+ '\'' +
", author='" + author
+ '\'' +
", postDate='" + postDate
+ '\'' +
'}';
}
}
继承es接口
public interface BookRepository extends ElasticsearchRepository<BookBean, String> {
List
<BookBean> findByAuthor(String author
);
List
<BookBean> findByTitle(String title
);
}
调用
public class BookServiceTest extends EsApplicationTests {
@Resource
private BookRepository bookRepository
;
@Test
public void save(){
BookBean book
= new BookBean();
book
.setId("1");
book
.setAuthor("yu");
book
.setPostDate("2019-09-02");
book
.setTitle("123");
bookRepository
.save(book
);
}
@Test
public void findByAuthor(){
List
<BookBean> yu
= bookRepository
.findByAuthor("yu");
System
.out
.println(yu
);
}
}
出现的异常
异常一
org
.elasticsearch
.client
.transport
.NoNodeAvailableException
: None of the configured nodes are available
: [{#transport#
-1}{3H
-4Xug_QMC2lFQpqPJhVw
}]
这个异常初步判断为本地调用远程es不通, 使用http://47.xx.xx.xx:9200/调用显示正常
{
name
: "node-1",
cluster_name
: "my-es",
cluster_uuid
: "WHiWU6ekREq9xoqXFIbjBg",
version
: {
number
: "6.6.2",
build_flavor
: "default",
build_type
: "tar",
build_hash
: "3bd3e59",
build_date
: "2019-03-06T15:16:26.864148Z",
build_snapshot
: false,
lucene_version
: "7.6.0",
minimum_wire_compatibility_version
: "5.6.0",
minimum_index_compatibility_version
: "5.0.0"
},
tagline
: "You Know, for Search"
}
经查阅资料es需要使用9200-9400的端口号(具体用途不清楚)而不是只有9200打开阿里云安全组进行配置后就可以正常使用了
异常二
Caused by: java.net.ConnectException: Connection refused: no further information
这个错误应该是 在spring boot 启动时 检查了一下 es的健康状态 然后请求走的是 9200端口 我的es 安装在服务器上了 没有安装到本地 RestClientProperties类中默认为 localhost:9200 所以拒绝很正常 因为本地就没有 添加配置
spring.elasticsearch.rest.uris=47.xx.xx.xx:9200