springboot elasticsearch nativeSearchQueryBuilder高亮显示字段
时间: 2023-10-20 20:20:52 浏览: 297
要在Spring Boot中使用`nativeSearchQueryBuilder`实现Elasticsearch搜索结果中的高亮显示字段,可以按照以下步骤操作:
1. 添加依赖
在`pom.xml`文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
```
2. 编写查询方法
在查询方法中,使用`nativeSearchQueryBuilder`构建查询条件,并使用`HighlightBuilder`设置高亮显示字段,示例代码如下:
```java
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.SearchPage;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import java.util.HashMap;
import java.util.Map;
public class ExampleSearchService {
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
public Map<String, Object> search(String keyword, int pageNo, int pageSize) {
// 构建查询条件
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("title", keyword));
// 设置高亮显示字段
HighlightBuilder highlightBuilder = new HighlightBuilder()
.field("title")
.requireFieldMatch(false)
.preTags("<span style='color:red'>")
.postTags("</span>");
queryBuilder.withHighlightBuilder(highlightBuilder);
// 分页查询
Pageable pageable = PageRequest.of(pageNo, pageSize);
SearchHits<ExampleEntity> searchHits = elasticsearchRestTemplate.search(
queryBuilder.build(),
ExampleEntity.class,
IndexCoordinates.of("example"),
pageable
).getSearchHits();
// 解析查询结果
Map<String, Object> result = new HashMap<>();
result.put("total", searchHits.getTotalHits().value);
result.put("list", searchHits.getSearchHits());
return result;
}
}
```
在以上代码中,`withQuery`方法用于设置查询条件,`withHighlightBuilder`方法用于设置高亮显示字段,`preTags`和`postTags`用于指定高亮显示的前缀和后缀。
3. 在页面中显示高亮字段
在页面中,可以通过以下方式获取高亮显示的字段:
```html
<div th:each="hit : ${result.list}">
<h3 th:text="${hit.highlight('title')}"></h3>
<p th:text="${hit.content}"></p>
</div>
```
在以上代码中,`highlight`方法用于获取高亮显示的字段值。
注意,以上代码仅为示例代码,需要根据具体的业务需求进行修改。
阅读全文