使用springboot ,ElasticSearch7.x版本,NativeSearchQueryBuilder类 如何返回前端高亮显示
时间: 2024-05-03 10:16:40 浏览: 152
在使用`NativeSearchQueryBuilder`查询时,可以通过设置`HighlightBuilder`来实现高亮显示。具体步骤如下:
1. 创建`HighlightBuilder`对象,并设置高亮显示的字段和高亮前缀、后缀:
```
HighlightBuilder highlightBuilder = new HighlightBuilder()
.field("title") // 需要高亮显示的字段名
.preTags("<em>") // 高亮前缀
.postTags("</em>"); // 高亮后缀
```
2. 将`HighlightBuilder`对象设置到`NativeSearchQueryBuilder`中:
```
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder()
.withHighlightBuilder(highlightBuilder) // 设置高亮显示
.withQuery(QueryBuilders.matchQuery("title", "关键字"));
```
3. 执行查询并获取结果,处理高亮显示:
```
SearchHits<YourEntity> searchHits = elasticsearchRestTemplate.search(queryBuilder.build(), YourEntity.class);
List<SearchHit<YourEntity>> hits = searchHits.getSearchHits();
List<YourEntity> entities = new ArrayList<>();
for (SearchHit<YourEntity> hit : hits) {
YourEntity entity = hit.getContent();
// 处理高亮显示
Map<String, List<String>> highlightFields = hit.getHighlightFields();
List<String> highlightTitle = highlightFields.get("title");
if (highlightTitle != null && !highlightTitle.isEmpty()) {
entity.setTitle(highlightTitle.get(0)); // 将高亮显示的内容设置到实体对象中
}
entities.add(entity);
}
```
在上述代码中,`searchHits.getSearchHits()`获取到的是`SearchHit<YourEntity>`类型的列表,其中包含了查询结果和高亮显示信息。可以通过`hit.getContent()`获取到实体对象,通过`hit.getHighlightFields()`获取到高亮显示的字段和内容。最后,将高亮显示的内容设置到实体对象中即可。
阅读全文