@
一、高亮查詢
高亮查詢就是你輸入的關鍵字,以一定的特殊字符樣式展示給用戶,讓用戶知道為什么這個結果被檢索出來
高亮展示的數據,本身就是文檔中的一個field,單獨將field以highlight的形式返回給你。
ES提供了一個highlight屬性,和query同級別的。
- fragment_size :指定高亮數據展示多少個字符回來;
- pre_tag:指定前綴標簽,如
<font color="red">
- post_tags:指定后綴標簽,如
</font>
- field:指定那個字段為高亮字段
1.1、實例:依據smsContent字段包含的魅力字段語法高;
1.1.1、RESTful 代碼
POST /sms-logs-index/_search
{
"query": {
"match": {
"smsContent": "魅力"
}
},
"highlight": {
"fields": {
"smsContent": {}
},
"pre_tags": "<font color='red'>",
"post_tags": "</font>",
"fragment_size": 10
}
}
1.1.2、java 代碼
@Test
public void height() throws IOException {
// 1、SearchRequest
SearchRequest searchRequest = new SearchRequest(index);
// 2、指定查詢條件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 2.1、查詢條件
searchSourceBuilder.query(QueryBuilders.matchQuery("smsContent", "魅力"));
// 2.2、指定高亮
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("smsContent", 10)
.preTags("<font color='red'>")
.postTags("</font>");
searchSourceBuilder.highlighter(highlightBuilder);
searchRequest.source(searchSourceBuilder);
// 3、執行
SearchResponse resp = client.search(searchRequest, RequestOptions.DEFAULT);
// 4、打印
for (SearchHit hit : resp.getHits().getHits()) {
System.out.println(hit.getHighlightFields().get("smsContent"));
}
}