ES--highlight(高亮)查询
@[TOC]
# 一、高亮查询
高亮查询就是你输入的关键字,以一定的特殊字符样式展示给用户,让用户知道为什么这个结果被检索出来
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210331170042176.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1eGludGRyaA==,size_16,color_FFFFFF,t_70)
高亮展示的数据,本身就是文档中的一个**field**,单独将field以highlight的形式返回给你。
ES提供了一个highlight属性,和query同级别的。
- fragment_size :指定高亮数据展示多少个字符回来;
- pre_tag:指定前缀标签,如 ``
- post_tags:指定后缀标签,如 ``
- field:指定那个字段为高亮字段
## 1.1、实例:依据smsContent字段包含的魅力字段语法高;
### 1.1.1、RESTful 代码
```json
POST /sms-logs-index/_search
{
"query": {
"match": {
"smsContent": "魅力"
}
},
"highlight": {
"fields": {
"smsContent": {}
},
"pre_tags": "",
"post_tags": "",
"fragment_size": 10
}
}
```
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210331170409400.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1eGludGRyaA==,size_16,color_FFFFFF,t_70)
### 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("")
.postTags("");
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"));
}
}
```
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210331171327700.png)
# 关注我的公众号【宝哥大数据】, 更多干货
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210710133932154.png)