一、高亮查詢方案
- 1、直接基於http發送請求
- 2、基於springboot Repositories
- 3、基於原生Rest Client(HighRestClient)
推建使用方案2
二、具體實現
1、直接基於http發送請求
參考官方:
Highlighting | Elasticsearch Reference [7.10] | Elastic#格式為GET /index名稱/_search _search固定
# contents為字段名稱,kimchy為輸入的關鍵字
GET /bank/_search
{
"query": {
"match": { "contents": "kimchy" }
},
"highlight": {
"fields": {
"contents": {}
}
}
}
2、基於springboot Repositories
引入@Highlight 注解
@Highlight(fields = { @HighlightField(name = "firstname") }, parameters = @HighlightParameters( preTags = "<strong>", postTags = "</strong>" )) List<SearchHit<Person>> findByFirstname(String firstname);
Test Case
/**
* 高亮顯示
* 使用@Highlight注解
*/
@Test
void queryByFirstname() {
List<SearchHit<Person>> result = personRepository.findByFirstname("hanko");
result.forEach(res-> {
Map<String, List<String>> highlightFields = res.getHighlightFields();
List<String> highlight = highlightFields.get("firstname");
highlight.forEach(h-> System.out.println(h));
});
}
3、基於原生Rest Client(HighRestClient)
/**
* 高亮查詢
* @throws IOException
*/
@Test
void highlight() throws IOException {
SearchRequest searchRequest = new SearchRequest("high-index01");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.highlighter(highlightBuilder());
searchSourceBuilder.query(new MatchQueryBuilder("title", "你好"));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = restHighLevelClient
.search(searchRequest, RequestOptions.DEFAULT);
printHits(searchResponse);
}
設置高量屬性
private HighlightBuilder highlightBuilder() {
HighlightBuilder highlightBuilder = new HighlightBuilder();
HighlightBuilder.Field highlightTitle =
new HighlightBuilder.Field("title");
highlightBuilder.field(highlightTitle);
highlightBuilder.preTags("<font size=\"3\" color=\"red\">");
highlightBuilder.postTags("</font>");
return highlightBuilder;
}
源代碼倉庫:
https://gitee.com/hankzhousandyos/springboot-elasticsearch
最新Java Elasticsearch 7.10教程(匯總)
玄明Hanko:最新Java Elasticsearch 7.10教程(匯總)