数据准备
ElasticSearch 实现分词全文检索 - 测试数据准备
高亮查询
高亮查询,就是用户输入的关键字,以一定的特殊样式展示给用户,让用户知道为什么这个结果被检索出来
高亮展示的数据,本身就是文档中的一个Field,单独将Field以highlight的形式返回
ES提供了一个 highlight 属性,和 query 同级别的
- fragment_size:指定返回多少个高亮数据,默认100
- pre_tags:指定前缀标签
<font color="red">
- post_tags:指定后缀标签
</font>
- fields:指定哪几个字段以高亮形式返回
# highlight 查询 POST /sms-logs-index/_search { "query": { "match":{ "smsContent": "江苏" } }, "highlight": { "fields": { "smsContent": {} #指定哪几个字段以高亮形式返回 }, "pre_tags": "<font color='red'>", "post_tags": "</font>" } }
Java
@Test void highlightQuery() throws Exception { String indexName = "sms-logs-index"; RestHighLevelClient client = ESClient.getClient(); //1. 创建SearchRequest对象 SearchRequest request = new SearchRequest(indexName); //2. 指定查询条件 SearchSourceBuilder builder = new SearchSourceBuilder(); builder.query(QueryBuilders.matchQuery("smsContent","江苏")); HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.field("smsContent",10) .preTags("<font color='red'>") .postTags("</font>"); builder.highlighter(highlightBuilder); request.source(builder); //3. 执行查询 SearchResponse resp = client.search(request, RequestOptions.DEFAULT); //4. 输出返回值 for (SearchHit hit : resp.getHits().getHits()) { System.out.println(hit.getHighlightFields()); } }