1、引入依赖
在需要集成ElasticSearch的项目的pom文件中,添加下面依赖:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>4.4.18</version>
</dependency>

2、修改nacos对应的微服务的配置
# spring配置
spring:
redis:
host: 192.168.80.192
port: 6379
password:
elasticsearch:
rest:
uris: http://192.168.80.192:9200

3、引入ElasticSearch的模板引擎
@Autowired
ElasticsearchRestTemplate elasticsearchRestTemplate;
4、检查并创建索引和映射
es对象的创建,没有给出代码
@PostConstruct
public void readProductForEs() {
// 项目启动时,从数据库中读取商品信息,并保存到ES中
List<TbProduct> tbProducts = tbProductMapper.selectTbProductList(null);
// 检查并创建索引和映射
IndexOperations indexOps = elasticsearchRestTemplate.indexOps(TbProduct.class);
if (!indexOps.exists()) {
// 创建索引
indexOps.create();
// 创建映射
Document mapping = indexOps.createMapping(TbProduct.class);
indexOps.putMapping(mapping);
}
// 批量插入
elasticsearchRestTemplate.save(tbProducts);
log.info("商品信息保存到ES成功");
}
5、高亮查询
@Override
public AjaxResult listFromEs(String pageNum, String pageSize, TbProduct tbProduct) {
//--1 构造参数
Integer num = Integer.parseInt(pageNum);
if(num >= 1) {
num = num - 1;
}
PageRequest pageRequest = PageRequest.of(num, Integer.parseInt(pageSize));
//--2
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
if(org.apache.commons.lang3.StringUtils.isNotEmpty(tbProduct.getProductName())) {
boolQueryBuilder.should(QueryBuilders.matchQuery("productName", tbProduct.getProductName()));
}
HighlightBuilder highlightBuilder = new HighlightBuilder().field("productName").preTags("<font color='red'>").postTags("</font>");
nativeSearchQueryBuilder.withQuery(boolQueryBuilder)
.withPageable(pageRequest)
.withHighlightBuilder(highlightBuilder);
//--3
SearchHits<TbProduct> searchHits = elasticsearchRestTemplate.search(nativeSearchQueryBuilder.build(), TbProduct.class);
//--4 读取查询结果
Long total = searchHits.getTotalHits();
List<TbProduct> list = new ArrayList<TbProduct>();
List<SearchHit<TbProduct>> searchHitList = searchHits.getSearchHits();
for (SearchHit<TbProduct> tbProductSearchHit : searchHitList) {
TbProduct content = tbProductSearchHit.getContent();
// 高亮处理
List<String> productNames = tbProductSearchHit.getHighlightField("productName");
if(productNames != null && productNames.size() > 0) {
content.setProductName(productNames.get(0));
}
list.add( content);
}
HashMap<String, Object> map = new HashMap<>();
map.put("total", total);
map.put("rows", list);
return AjaxResult.success("读取成功", map);
}