使用 elasticsearch 时,有一个很常见的需求是,能在页面上将搜索出的结果中属于关键字的文字,进行高亮显示。

elasticsearch 对这个做了一定的支持,它能查询结果的基础上,额外返回需要高亮显示关键字的整个文本,至于具体你想怎么用它,需要根据业务自行实现。

http 请求体方式

使用 kibana,直接编写 http 请求体发送查询请求。

在查询的时候,增加参数 highlight, pre_tags, post_tags。highlight 中添加需要进行高亮展示关键字的字段。

GET /data_collect/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "车辆",
            "fields": ["requirement", "tag"]
          }
        }
      ],
      "minimum_should_match": 1
    }
  },
  "highlight": {
    "fields": {
      "tag": {},
      "requirement": {}
    },
    "pre_tags": "<span style=\"color: red\">",
    "post_tags": "</span>"
  }
}

查询结果中会额外返回高亮列表:

java 编程方式

HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("requirement").field("tag");
highlightBuilder.preTags("<span style=\"color: red\">");
highlightBuilder.postTags("</span>");

然后把 HighlightBuilder 设置到 SearchSourceBuilder 中就行了。

查询成功后,在 SearchHit 中会返回一个 map (Map<String, HighlightField> highlightFields),里面存储了包含高亮关键字的字段以及对应的值。

值中的关键字用我们定义的 html 标签(span)包起来了,这个跟 http 请求体方式是一样的。

我这里由于需要先从数据库中数据明细,所以先把 HighlightField 缓存了起来。之后根据id,找到对应的包含高亮关键字的值,通过反射方式,把包含高亮关键字的值,设置到vo中,返回到前端。

这里用反射是因为返回的 Highlight 列表中,字段是不确定的,只有匹配的字段才会返回。如果字段一多,一个个判断有没有值,是挺麻烦的,所以用了反射。

返回给前端的结果中,包含了 html 标签:

前端展示

前端展示(这里使用vue)的时候,使用 v-html 指令来渲染文本就行,它可以渲染富文本。比如:

效果如下(这个是支持同义词的,比如这里我把"车辆"和"机动车"设置成了同义词):

elasticsearch搜索关键字高亮显示相关推荐

  1. html搜索时关键字变数字,JavaScript正则方法replace实现搜索关键字高亮显示

    前言 正则表达式是字符串处理工具中强有力的工具.也有人认为这只是一个小玩具,但不管怎么说都离不开它. 这里介绍的是JavaScript的正则表达式的replace方法,和实现搜索关键字高亮的功能. 先 ...

  2. 搜索关键字高亮显示,就比微信多个多音字搜索

    首先看下demo效果,下载地址 一. 需求要求实现的效果 汉字支持汉字直接搜索.拼音全拼搜索.拼音简拼搜索 搜索匹配到的关键字高亮显示 搜索结果优先显示全部匹配.其次是拼音全拼匹配.拼音简拼匹配:关键 ...

  3. 微信小程序 搜索 关键字 高亮显示

    效果图: 将搜索结果挨个格式化为数组,然后在渲染的时候判断type是否等于1,如果等于1,那就高亮显示. 主要代码: <view class="address-title"& ...

  4. jq搜索关键字高亮显示

    在我们平时做项目经常会遇到关键字需要高亮显示的情况,算了 不编了,写不下去了,直接看代码吧 var searchText = keyword;//获取你输入的关键字:var regExp = new ...

  5. uniapp 搜索关键字高亮显示实现

    其实是就是个正则表达式啊,主要还是得看后端返回的是什么数据,你才可以根据后端去更改即可. 显示:

  6. ElasticSearch搜索实例含高亮显示及搜索的特殊字符过滤

    应用说明见代码注解. 1.简单搜索实例展示: public void search() throws IOException {// 自定义集群结点名称String clusterName = &qu ...

  7. 搜索关键字高亮_SpringBoot+Mybatis-Plus+Elasticsearch 实现关键字搜索高亮展示

    一.概述&介绍 Elasticsearch:Elasticsearch 是基于Lucense 技术的搜索引擎(服务器),将数据进行缓存再进行查询.​ 与数据库查询的比较:​ (1)相当于sql ...

  8. vue element el-table 表格搜索 搜索表格内容关键字标红 关键字高亮显示

    vue element el-table 表格搜索 搜索表格内容关键字标红 关键字高亮显示 最近公司项目需求,搜索表格的内容,并且需要搜索的关键字高亮显示(关键字标红),如图所示最终效果: 1.在需要 ...

  9. 前端Vue开发,多关键字搜索时,搜索结果高亮显示(解决输入英文时,会错误的把html标签渲染的问题)

    问题背景: 网上搜索关于搜索结果高亮显示,基本上都是单一关键字搜索,或者多关键字搜索,但是没有解决 输入英文字符时,把html标签渲染出来的问题,比如在进行多关键字搜索时,可能会进行a;s的搜索, 就 ...

最新文章

  1. 排序算法二:归并排序(Merge sort)
  2. 阅读笔记 1 火球 UML大战需求分析
  3. centos7 iptables 端口转发 保存_Linux 开发笔记《如何在CentOS 7上启动和启用Firewalld》...
  4. 信息学奥赛一本通C++语言——1062:最高的分数
  5. 俞敏洪吹的牛破了?首场直播带货后 新东方股价大跌
  6. 【Flink】FLink SQL TableException: Table sink doesn‘t support consuming update changes which is
  7. sql server 优化_SQL Server中很少有外行优化
  8. 中文分词软件SCWS
  9. 深度学习2.0-24.过拟合与欠拟合
  10. CSS 7阶层叠水平
  11. 使用dsoFramer开始Office应用程序
  12. ZeroMQ XPub/XSub模式
  13. MYSQL数据库ANY的用法_数据库——IN、ANY、SOME 和 ALL 操作符的使用
  14. 计算机学院 储昭坤,计算机与信息学院“紫罗兰”团队开展志愿服务活动
  15. 洛谷 P1144 最短路计数 dijkstra
  16. ThinkPHP3.2.3 实现微信小程序微信授权登录
  17. 禅道 php7.1,Centos7安装PHP7 + 禅道(Nginx 1.18 + PHP7.2)
  18. 【AE表达式】300多个人名正从宇宙中飞来……
  19. 未能导入activex控件,请确保它正确注册的完美解决方案
  20. UINavigation导航栏和UITabbar布局和样式

热门文章

  1. 【兼职避坑篇】怎么找到靠谱的客服兼职工作
  2. 2017年前端面试题整理汇总100道题
  3. 2012-09-08开讲啦 王石《坚持与放下》
  4. 自动检测U盘autorun.inf专杀
  5. 为什么电脑不能安全关闭计算机,电脑执行关机命令后,不能自动切断电源,而是在屏幕上显示“您可以安全关闭计算机”...
  6. 云易绘教育:画人体的3个常见误区
  7. BTBU 2021春季 自动化 自动识别技术实验记录(1)
  8. TFS2018-WIK介绍03-VSTS的特有功能,TFS2018中没有的功能
  9. 图形可视化1:Seaborn之lmplot函数
  10. linux系统下如何切换到root用户