依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
配置
spring:
data:
elasticsearch:
cluster-nodes: 192.168.1.10:9300
cluster-name: elasticsearch
普通增删改查
public interface NewsRepository extends ElasticsearchCrudRepository<News, Long>
高亮搜索
public AggregatedPage<News> getIdeaListBySrt(String content, Integer pageNum, Integer pageSzie) {
Pageable pageable = PageRequest.of(pageNum, pageSzie);
String preTag = "<font color='#dd4b39'>";//google的色值
String postTag = "</font>";
SearchQuery searchQuery = new NativeSearchQueryBuilder().
withQuery(matchQuery("name", content)).
withQuery(matchQuery("text", content)).
withHighlightFields(new HighlightBuilder.Field("name").preTags(preTag).postTags(postTag),
new HighlightBuilder.Field("text").preTags(preTag).postTags(postTag)).build();
searchQuery.setPageable(pageable);
// 不需要高亮直接return ideas
// AggregatedPage<Idea> ideas = elasticsearchTemplate.queryForPage(searchQuery, Idea.class);
// 高亮字段
AggregatedPage<News> ideas = elasticsearchTemplate.queryForPage(searchQuery, News.class, new SearchResultMapper() {
@Override
public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
List<News> chunk = new ArrayList<>();
for (SearchHit searchHit : response.getHits()) {
if (response.getHits().getHits().length <= 0) {
return null;
}
News news = new News();
//name or memoe
HighlightField ideaTitle = searchHit.getHighlightFields().get("name");
if (ideaTitle != null) {
news.setName(ideaTitle.fragments()[0].toString());
}
HighlightField ideaContent = searchHit.getHighlightFields().get("text");
if (ideaContent != null) {
news.setText(ideaContent.fragments()[0].toString());
}
chunk.add(news);
}
if (chunk.size() > 0) {
return new AggregatedPageImpl<>((List<T>) chunk);
}
return null;
}
});
return ideas;
}