博主15年的时候已经在使用es,当时es版本是3.7,java框架是springMvc,很多配置都需要自行配置集成,并通过手写代码实现es接口查询功能。后通过springboot集成spring-data-elasticseach就简单多了,所有东西都是开箱即用,连N多配置都省了,好了下面直接进入主题集成过程:
- 安装es服务,我这里是安装的es7.8.1,springboo版本为2.4.2,安装过程不再说明,默认您已经完成es安装,es版本与springboot版本对应如下,如果版本不一致会有很多问题,无法满足开发需求:
2. POM文件中引入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
3. application.yml中引入es配置:
elasticsearch:
rest:
username:
password:
uris: http://192.168.8.229:9200
4.编写实体类,实体类对应一份索引:
5. 通过java硬编码方式增加测试索引数据:
@Override
public void addEntity(Object object){
ZcInfor01Entity zcInfor01Entity = new ZcInfor01Entity();
zcInfor01Entity.setSysGuid("0000000");
zcInfor01Entity.setZc2003001("01010102");
zcInfor01Entity.setZc2003002("abccccc");
zcInfor01Entity.setZc2003003("ddddddddddd");
zcInfor01Entity.setZc2003004("中文中文中文");
zcInfor01Entity.setZc2003005("永文英文英文英文英文");
zcInfor01Entity.setZc2003006("程序程序程序程序");
elasticsearchRestTemplate.save(zcInfor01Entity);
}
6. 设置查询条件、排序方式、高亮字段,实现查询功能:
@Override
public List<ZcInfor01Entity> getListByCondition(QueryEntityConditionVo queryEntityConditionVo) {
//设置分页条件
Integer pageIndex = queryEntityConditionVo.getPage() == 0 ? 1 : queryEntityConditionVo.getPage();
Integer pageSize = queryEntityConditionVo.getSize() == 0 ? 10 : queryEntityConditionVo.getSize();
Pageable pageable = PageRequest.of(pageIndex - 1, pageSize);
//设置检索条件
Sbuilders sbuilders = SearchBuilderFactory.createBuilders(SearchBuilderFactory.BUILDER_QUERY);
BoolQueryBuilder queryBuilder = (BoolQueryBuilder)sbuilders.assembleBuilder(queryEntityConditionVo);
//设置排序方式
Sbuilders sortBuilders = SearchBuilderFactory.createBuilders(SearchBuilderFactory.BUILDER_SORT);
SortBuilder termsSortBuilder = (SortBuilder) sortBuilders.assembleBuilder(queryEntityConditionVo);
//设置高亮
Sbuilders highBuilders = SearchBuilderFactory.createBuilders(SearchBuilderFactory.BUILDER_HIGHLIGHT);
HighlightBuilder highlightBuilder = (HighlightBuilder)highBuilders.assembleBuilder(queryEntityConditionVo);
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder().withQuery(queryBuilder).withPageable(pageable);
if (termsSortBuilder != null) {
nativeSearchQueryBuilder.withSort(termsSortBuilder);
}
if(queryEntityConditionVo.getIsHighLight() == IndexFieldConstant.IS_HIGHLIGHT_DEFAULT){
nativeSearchQueryBuilder.withHighlightBuilder(highlightBuilder);
}
NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
SearchHits<ZcInfor01Entity> hits = elasticsearchRestTemplate.search(searchQuery,ZcInfor01Entity.class);
List<ZcInfor01Entity> list = new ArrayList<>();
hits.getSearchHits().stream().forEach(entity->{
list.add(entity.getContent());
});
return list;
}
7.POSTMAN测试接口查询数据:
主要就是1、2、3、4步骤为核心实现方式,后面的集成添加索引与各种查询可通过es官方文档查询相关的接口。