SpringBoot+ES+Gradle
前言
springboot集成es的方法有很多种,我选的是springboot data es这种方式,因为这种方式真的很好用。其他博客有说这种继承方式不支持es的高版本,但是现在基本都支持了(具体的版本支持可以去这里查看https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.versions)。
动手
1.引入依赖
//引入springboot-parent,和依赖管理,这样就不用指明版本号了
plugins{
id 'org.springframework.boot' version '2.2.1.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web"
,"org.springframework.boot:spring-boot-starter-data-elasticsearch")
testCompile group: 'junit', name: 'junit', version: '4.12'
}
2.配置文件中写入es
server:
port: 9933
spring:
data:
elasticsearch:
#这里一定要注意端口号,是9300不是 9200
cluster-nodes: 192.168.0.181:9300
#如果修改过 cluster-name这里一定要配置
cluster-name: my-application
Tip:查看自己es的信息,在浏览器中访问http://192.168.0.181:9200/(自己es的地址)可以得到下图
3.创建对应实体
@Document(indexName = "test-user",type = "user")
@Data
public class User {
@Id
private String id;
@Field(type = FieldType.Text)
private String userName;
@Field(type = FieldType.Integer)
private int age;
}
4.创建操作接口
@Repository
public interface UserRepository extends ElasticsearchRepository<User,String> {
}
5.愉快的使用(具体的使用方法,网络上也有很多)
/**
* @param
* @description 分页查询
* @author kevin
*/
public void page(User user) {
//查询条件
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.must(QueryBuilders.matchQuery("userName", user.getUserName()));
boolQueryBuilder.should(QueryBuilders.termQuery("deptName.keyword", "测试部门"));
//排序
FieldSortBuilder sortBuilder = SortBuilders.fieldSort("age").order(SortOrder.ASC);
//构建查询
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
nativeSearchQueryBuilder.withQuery(boolQueryBuilder)
.withSort(sortBuilder)
//分页
.withPageable(PageRequest.of(1, 10));
Page<User> search = userRepository.search(nativeSearchQueryBuilder.build());
return;
}
/**
* @param
* @description 普通查询
* @author kevin
*/
public void query(User user) {
//查询条件
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.must(QueryBuilders.matchQuery("userName", user.getUserName()));
boolQueryBuilder.should(QueryBuilders.termQuery("deptName.keyword", "测试部门"));
Iterable<User> search = userRepository.search(boolQueryBuilder);
//如果需要排序,可以考虑查询完了使用java 来排序
return;
}
tip:使用的时候我的思维导图是: