最新Java Elasticsearch 7.10教程(五)-高亮查詢
阿新 • • 發佈:2020-12-04
一、高亮查詢方案
- 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