使用es:
1、pom依赖需要引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2、持久化层Repository需要继承extends ElasticsearchRepository<SkuProduct, Long>
3、service中注入ElasticsearchTemplate
使用elasticsearchTemplate.queryForPage的重载方法实现不高亮和高亮
1、不高亮:elasticsearchTemplate.queryForPage(nativeSearchQueryBuilder.build(), SkuProduct.class);
2、高亮elasticsearchTemplate.queryForPage(nativeSearchQueryBuilder.build(), SkuProduct.class, HeightUtils.resultMapper(SkuProduct.class, requestDTO.getHeightFields()));
/**
* 处理高亮结果
*
* @param model 数据模型
* @param heightFields 高亮字段
* @param <T>
* @return
*/
public static <T> SearchResultMapper resultMapper(T model, List<String> heightFields) {
return new SearchResultMapper() {
@Override
public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
List<T> chunk = new ArrayList<T>();
for (SearchHit searchHit : response.getHits()) {
if (response.getHits().getHits().length <= 0) {
return null;
}
Map<String, Object> entityMap = searchHit.getSource();
for (String highName : heightFields) {
if (searchHit.getHighlightFields() == null || searchHit.getHighlightFields().size() == 0) {
continue;
}
Text text[] = searchHit.getHighlightFields().get(highName).fragments();
if (text.length > 0) {
String highValue = searchHit.getHighlightFields().get(highName).fragments()[0].toString();
entityMap.put(highName, highValue);
}
}
try {
chunk.add((T) BeanConvertUtils.mapToObject(entityMap, clazz));
} catch (Exception e) {
e.printStackTrace();
}
}
if (chunk.size() > 0) {
return new AggregatedPageImpl<T>((List<T>) chunk);
}
return new AggregatedPageImpl<T>(new ArrayList<T>());
}
};
}