@[TOC]
一、高亮查问
高亮查问就是你输出的关键字,以肯定的特殊字符款式展现给用户,让用户晓得为什么这个后果被检索进去
高亮展现的数据,自身就是文档中的一个 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"));
}
}
关注我的公众号【宝哥大数据】,更多干货