Spring Boot 整合 Elasticsearch

spring-boot-starter-aop

org.springframework

spring-context-support

org.springframework.boot

spring-boot-starter-data-elasticsearch

org.elasticsearch.client

transport

5.1.1

io.springfox

springfox-swagger2

2.7.0

io.springfox

springfox-swagger-ui

2.7.0

org.projectlombok

lombok

1.16.6

com.alibaba

fastjson

1.2.39

添加配置文件application.properties

spring.data.elasticsearch.cluster-name=elasticsearch

spring.data.elasticsearch.cluster-nodes=localhost:9300

spring.data.elasticsearch.local=false

spring.data.elasticsearch.repositories.enabled=true

entity类

/**

  • @author 向振华

  • @date 2018/11/21 15:48

*/

@Data

@NoArgsConstructor

@AllArgsConstructor

//es注解,设置索引名称以及类型

@Document(indexName = “xzhes”, type = “info”)

public class EsEntity {

//id(需要添加@Id注解,或会自动识别名称为id的字段为id,其余字段没有限制)

@Id

private Integer id;

//名称

private String name;

//性别

private String sex;

//年龄

private Integer age;

}

Repository类

/**

  • @author 向振华

  • @date 2018/11/21 16:53

*/

public interface EsRepository extends ElasticsearchRepository<EsEntity, Integer> {

}

service类

/**

  • @author 向振华

  • @date 2018/11/21 15:54

*/

public interface EsService {

void save(EsEntity esEntity);

List select(Search search);

}

/**

  • @author 向振华

  • @date 2018/11/22 10:08

*/

@Service

public class EsServiceImpl implements EsService {

@Resource

private EsRepository esRepository;

@Override

public void save(EsEntity esEntity) {

esRepository.save(esEntity);

}

@Override

public List select(Search search) {

//创建builder

BoolQueryBuilder builder = QueryBuilders.boolQuery();

//builder下有must、should以及mustNot 相当于sql中的and、or以及not

//设置“名称”模糊搜索

if (search.getName()!=null) {

builder.must(QueryBuilders.matchPhraseQuery(“name”, search.getName()));

}

//设置“性别”

if (search.getSex()!=null) {

builder.must(new QueryStringQueryBuilder(search.getSex()).field(“sex”));

}

//按照年龄从高到低

FieldSortBuilder sort = SortBuilders.fieldSort(“age”).order(SortOrder.DESC);

//设置分页(拿第一页,一页显示两条)。注意!es的分页api是从第0页开始的(坑)

PageRequest page = new PageRequest(0, 2);

//构建查询

NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();

//将搜索条件设置到构建中

nativeSearchQueryBuilder.withQuery(builder);

//将分页设置到构建中

nativeSearchQueryBuilder.withPageable(page);

//将排序设置到构建中

nativeSearchQueryBuilder.withSort(sort);

//生产NativeSearchQuery

NativeSearchQuery query = nativeSearchQueryBuilder.build();

//执行

Page searchs = esRepository.search(query);

//获取总条数(前端分页需要使用)

int total = (int) searchs.getTotalElements();

//获取查询到的数据内容

List content = searchs.getContent();

return content;

}

}

搜索实体类

/**

  • @author 向振华

  • @date 2018/11/22 11:02

*/

@Data

@NoArgsConstructor

@AllArgsConstructor

public class Search {

//名称

@ApiModelProperty(value = “名称”)

private String name;

//性别

@ApiModelProperty(value = “性别”)

private String sex;

//年龄

@ApiModelProperty(value = “年龄”)

private Integer age;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值