一、环境说明
SpringBoot 2.7.5
Elasticsearch 7.16.3
二、集成步骤
1.maven引入es启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2.application.yml配置文件
spring:
elasticsearch:
uris: http://IP:9200
username: XXXX
password: XXXX
3.采用ElasticsearchRestTemplate进行检索
SpringBoot 3.0.4已经弃用ElasticsearchRestTemplate
@Component
public class EsComponent {
@Resource
private ElasticsearchRestTemplate elasticsearchRestTemplate;
/**
* 检索
*
* @return
*/
public SearchHits<Map> search(Query query) {
final SearchHits<Map> searchHits = elasticsearchRestTemplate.search(query, Map.class, IndexCoordinates.of("my_index"));
return searchHits;
}
}
三、简单使用
检索使用案例
/**
* 非nested字段高亮
*/
public void nonNestedFieldsHighlight() {
// 1.构建检索Query
final HighlightBuilder highlightBuilder = new HighlightBuilder()
.preTags("<em>").postTags("</em>")
.highlighterType("unified")
.field("name");
final NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("name", "Bob Johnson4"))
.withTrackTotalHits(true)
.withHighlightBuilder(highlightBuilder);
// 2.检索
final SearchHits<Map> searchResponse = esComponent.search(nativeSearchQueryBuilder.build());
// 3.检索结果处理
final List<SearchHit<Map>> searchHits = searchResponse.getSearchHits();
for (SearchHit searchHit : searchHits) {
final Map<String, ?> highlightFields = searchHit.getHighlightFields();
//使用高亮替换检索内容
highlightFields.entrySet().forEach(entry -> ((Map) searchHit.getContent()).put(entry.getKey(), entry.getValue()));
}
searchHits.forEach(entry -> System.out.println(entry.getContent()));
}