众所周知,Google、百度等搜索引擎在返回查询结果时都会有高亮处理,让用户能够方便地快速识别出内容相关性。
在 elastic search 中也提供了 highlight 高亮功能,可以返回与检索词相关的句子,以确认查询结果相关性。
查询条件增加一个新的 highlight 参数:
GET /megacorp/employee/_search { "query" : { "match_phrase" : { "about" : "rock climbing" } }, "highlight": { "fields" : { "about" : {} } } }
当执行该查询时,返回结果与之前一样,与此同时结果中还多了一个叫做 highlight 的部分。这个部分包含了 about 属性匹配的文本片段,并以 HTML 标签 <em></em> 封装:
{ ... "hits": { "total": 1, "max_score": 0.23013961, "hits": [ { ... "_score": 0.23013961, "_source": { "first_name": "John", "last_name": "Smith", "age": 25, "about": "I love to go rock climbing", "interests": [ "sports", "music" ] }, "highlight": { "about": [ "I love to go <em>rock</em> <em>climbing</em>" ] } } ] } }
在 SearchSourceBuilder 中设置一个 HighlightBuilder,可以用于设置高亮的字段。
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); HighlightBuilder highlightBuilder = new HighlightBuilder(); HighlightBuilder.Field highlightTitle = new HighlightBuilder.Field("title"); highlightTitle.highlighterType("unified"); highlightBuilder.field(highlightTitle); HighlightBuilder.Field highlightUser = new HighlightBuilder.Field("user"); highlightBuilder.field(highlightUser); searchSourceBuilder.highlighter(highlightBuilder);
在搜索返回结果中获取高亮字段的内容。
SearchHits hits = searchResponse.getHits(); for (SearchHit hit : hits.getHits()) { Map<String, HighlightField> highlightFields = hit.getHighlightFields(); HighlightField highlight = highlightFields.get("title"); Text[] fragments = highlight.fragments(); String fragmentString = fragments[0].string(); }高亮字段默认使用 HTML 标签 <em></em> 封装。如需自定义可以配置 preTags 和 postTags。
highlightBuilder.preTags("<span class=\"bg-danger text-white\">"); highlightBuilder.postTags("</span>");
本文来源:程序之心,转载请注明出处!
从计算机组成和结构的有关概念、计算机的发展历程及存储程序计算机开始讲起,介绍了计算机系统的组成和体系结构的基本概念,讨论了数据在计算机中的表示方法和运算方法。讲解ISA的基本概念,并以ARM指令集为例介绍了ISA设计时需要考虑的主要问题。介绍了设计控制器的两种经典方法—微程序与组合逻辑,详细讨论了流水线技术、影响流水线性能的因素及一些可行的解决方法。
最新内容
© 2016 - 2024 chengxuzhixin.com All Rights Reserved.