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;