基于Es的分词查询通过高亮效果实现前端高亮显示!!!!

引言:

经常我们在浏览器界面搜索关键词的时候,浏览器返回给我们的页面都是高亮显示关键词的效果,

如下:

我们要简单实现这个效果很简单,可以通过多种办法,这里通过Es 的高亮效果实现给我们关键字字段加自定义标签返回给前端,前端通过CSS样式和我们后端达成一致,给指定标签定义一个颜色样式就可以实现了。废话不多少 ->>>>>开始介绍

一.

我们通过Es提供的API在java中操作,具体步骤可以看我的另一篇博客7.7节超详细的~~~~~

Elasticsearch精英进阶:从零到精通的安装,从Kibana到Java API,全面掌握CRUD与DSL查询及聚合技术全攻略icon-default.png?t=O83Ahttps://blog.csdn.net/2301_77058976/article/details/140575189?spm=1001.2014.3001.5501

 后端代码

public CollectVO selectByEs(String name) {SearchRequest searchRequest=new SearchRequest("poem");BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();boolQuery.should(QueryBuilders.matchQuery("header", name));boolQuery.should(QueryBuilders.matchQuery("writer", name));searchRequest.source().query(boolQuery);HighlightBuilder highlightBuilder = new HighlightBuilder();HighlightBuilder.Field headerField = new HighlightBuilder.Field("header").preTags("<em>").postTags("</em>");HighlightBuilder.Field writerField = new HighlightBuilder.Field("writer").preTags("<em>").postTags("</em>");highlightBuilder.field(headerField);highlightBuilder.field(writerField);searchRequest.source().highlighter(highlightBuilder);SearchResponse search = null;try {search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);} catch (IOException e) {throw new RuntimeException(e);}//获取查询的数据数量SearchHit[] hits = search.getHits().getHits();List<String> header =new ArrayList<>();List<String> writer =new ArrayList<>();for (SearchHit hit : hits) {String json = hit.getSourceAsString();PoemHeaderAndWriterDTO bean = JSONUtil.toBean(json, PoemHeaderAndWriterDTO.class);//list.add(item);  添加到集合中在返回给System.out.println(bean);Map<String, HighlightField> highlightFields = hit.getHighlightFields();if (highlightFields.containsKey("writer")) {String writerHighlight = highlightFields.get("writer").fragments()[0].string();writer.add(writerHighlight);header.add(bean.getHeader());}if (highlightFields.containsKey("header")) {String headerHighlight = highlightFields.get("header").fragments()[0].string();header.add(headerHighlight);writer.add(bean.getWriter());}}CollectVO build = CollectVO.builder().zhus(writer).data(header).build();return build;}

 效果:

比如我们搜索诗人李白

可以看我们给 关键字加了标签了,这样子返回给前端,他们就可以很好操作了,通过V-html 加css 一条语句就可以了

前端:

当然这是在VsCode可以支持,这里我就简单演示一下,后续也就没什么难度了,因为我这里是用的Hx写的一个APP,可惜的是这里V-html因为安全缘故不支持这样子操作,害得俺弄了半天!

然后这里我选择直接使用第二种,替换关键词嘛!当然方法很多,可以自行选择哦!!!

二.

我只需要通过Es分词通过关键词查询我关联的数据返回给前端,前端帮我实现把原有的数据如果其中包含关键词,就替换标签加上样式也就解决了看效果->>>

后端:

  /*** 针对 HbuilderX 查询* @param name* @return*/public CollectVO selectByEs(String name) {SearchRequest searchRequest=new SearchRequest("poem");BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();boolQuery.should(QueryBuilders.matchQuery("header", name));boolQuery.should(QueryBuilders.matchQuery("writer", name));searchRequest.source().query(boolQuery);SearchResponse search = null;try {search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);} catch (IOException e) {throw new RuntimeException(e);}List<String> header =new ArrayList<>();List<String> writer =new ArrayList<>();SearchHit[] hits = search.getHits().getHits();for (SearchHit hit : hits) {String sourceAsString = hit.getSourceAsString();PoemHeaderAndWriterDTO bean = JSONUtil.toBean(sourceAsString, PoemHeaderAndWriterDTO.class);header.add(bean.getHeader());writer.add(bean.getWriter());}CollectVO build = CollectVO.builder().ancientPoetry(header).writer(writer).build();return build;}

前端:

  # 部分代码<view    style="font-size: 19px; color: rgb(0, 0, 0)"@click="shye(item ) "        v-html="highLight(item)"   >{{ item }}</view># 处理方法highLight(title){// 如果标题中包含,关键字就替换一下if(title.includes(this.query)){title = title.replace(this.query, // 这里是替换成html格式的数据,最好再加一个样式权重,保险一点'<font style="color:red!important; ">'+ this.query +'</font>')return title}// 不包含的话还用这个else{return title}},

效果:

我们也就实现了高亮展示了!!!!这里数据不是太多,感兴趣的朋友们可以自己试试呢!!我也就是没事玩玩!!!

 视频效果:

基于Es分词搜索和高亮显示

坤坤 坤坤坤坤坤坤 坤坤坤坤坤坤 坤坤坤坤坤坤 坤坤坤坤坤坤 坤坤坤坤坤坤 坤坤坤坤坤坤 坤坤坤

祝大家工作顺利,天天开心,事事顺利,尽管我们现在的不顺,往往是以后成长与成功的宝贵铺垫 !!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/443362.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计网】【计网】从零开始学习http协议 ---理解http重定向和请求方法

去光荣地受伤&#xff0c; 去勇敢地痊愈自己。 --- 简嫃 《水问》--- 从零开始学习http协议 1 知识回顾2 认识网络重定向3 http请求方法3.1 http常见请求方法3.2 postman工具进行请求3.3 处理GET和POST参数 1 知识回顾 前面两篇文章中我们学习并实现了http协议下的请求与应…

星融元P4交换机:在全球芯片短缺中,为您的网络可编程之路保驾护航

当数字化转型成为新常态&#xff0c;云计算、物联网、5G和人工智能等技术正以惊人的速度进步&#xff0c;重塑了我们对网络设备性能和适应性的预期。在这场技术革新的浪潮中&#xff0c;网络的灵活性、开放性和编程能力成为了推动行业发展的关键。P4可编程交换机&#xff0c;以…

计算机毕业设计 校内跑腿业务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

机器学习——多模态学习

多模态学习&#xff1a;机器学习领域的新视野 引言 多模态学习&#xff08;Multimodal Learning&#xff09;是机器学习中的一个前沿领域&#xff0c;它涉及处理和整合来自多个数据模式&#xff08;如图像、文本、音频等&#xff09;的信息。随着深度学习的蓬勃发展&#xff0…

RAG文本拆分深入研究

在这里&#xff0c;我们将尝试全面深入地掌握成功实施 RAG 所必需的不同主题。以下是示例 RAG 架构。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语…

docker简述

1.安装dockers&#xff0c;配置docker软件仓库 安装&#xff0c;可能需要开代理&#xff0c;这里我提前使用了下好的包安装 启动docker systemctl enable --now docker查看是否安装成功 2.简单命令 拉取镜像&#xff0c;也可以提前下载使用以下命令上传 docker load -i imag…

单片机闪存,闪存缓冲取,闪存延迟

一、启用闪存预取缓冲区&#xff08;FLASH_PrefetchBufferCmd (FLASH_PrefetchBuffer_Enable);&#xff09; 闪存预取缓冲区的作用&#xff1a; 在微控制器中&#xff0c;闪存是用于存储程序代码和常量数据的非易失性存储器。当微控制器执行程序时&#xff0c;需要从闪存中读取…

62 加密算法

62 加密算法 三种加密算法分类&#xff1a; 对称加密&#xff1a;密钥只有一个&#xff0c;解密、解密都是这个密码&#xff0c;加解密速度快&#xff0c;典型的对称加密有DES、AES、RC4等非对称加密&#xff1a;密钥成对出现&#xff0c;分别为公钥和私钥&#xff0c;从公钥…

单细胞转录组 —— simpleaf 原始数据处理

单细胞转录组 —— 原始数据处理实战&#xff08;simpleaf&#xff09; 前言 Alevin-fry 是一个快速、准确且内存节约的单细胞和单核数据处理工具。 Simpleaf 是用 Rust 编写的程序&#xff0c;它提供了一个统一且简化的界面&#xff0c;用于通过 alevin-fry 流程处理一些最…

实现std::sort,replace,fill,accumulate,equal等函数

std::sort /// <summary>/// std::sort 是从小到大排列的/// </summary>/// <typeparam name"IteratorClass"></typeparam>/// <typeparam name"ComparingFunctions"></typeparam>/// <param name"itBegin&qu…

系统端口号被占用问题处理(WindowsLinux系统)

Windows 直接kill占用端口的进程 WinR 输入cmd 打开命令行窗口 1.查询本地已被占用的端口号&#xff1a; 下面以8080端口为例&#xff1a; netstat -aon|findstr "8080" 查看本地8080端口进程的PID 2.杀死"xxxx"端口号的进程 (下面的22868是 你查到…

java.lang.NoClassDefFoundError: kotlin/Result解决方案

问题 在控制窗口上虽然报错是找不到对应的class&#xff0c;但是呢在我们导入kotlin的后&#xff0c;还是报相同的异常&#xff0c;在网上查找了各种资料&#xff0c;都没有解决方案。 问题分析 在idea2021之后&#xff0c;kotlin都使用远程仓库&#xff08;kotlinx-coeouti…

多模态大语言模型(MLLM)-InstructBlip深度解读

前言 InstructBlip可以理解为Blip2的升级版&#xff0c;重点加强了图文对话的能力。 模型结构和Blip2没差别&#xff0c;主要在数据集收集、数据集配比、指令微调等方面下文章。 创新点 数据集收集&#xff1a; 将26个公开数据集转换为指令微调格式&#xff0c;并将它们归类…

鸿蒙开发(NEXT/API 12)【管理应用与Wear Engine服务的连接状态】手机侧应用开发

监测应用与Wear Engine服务的连接状态 华为运动健康App在后台停止服务&#xff08;如功耗过高&#xff09;&#xff0c;从而导致应用与Wear Engine服务的连接状态发生变化。对于类似这种不确定的断开情况&#xff0c;开发者可以通过本功能特性了解当前应用和Wear Engine的连接…

电池大师 2.3.9 | 专业电池管理,延长寿命优化性能

Battery Guru 显示电池使用情况信息&#xff0c;测量电池容量&#xff08;mAh&#xff09;&#xff0c;并通过有用技巧帮助用户改变充电习惯&#xff0c;延长电池寿命。支持显示电池健康状况&#xff0c;优化电池性能。 大小&#xff1a;9.6M 百度网盘&#xff1a;https://pan…

【SQL】换座位

目录 语法 需求 示例 分析 代码 语法 SELECT user_id, user_name, IF(user_age < 18, Minor, IF(user_age < 65, Adult, Senior)) AS age_group FROM users; 使用IF函数来根据user_age的值将用户分为不同的年龄组 在SQL中&#xff0c;IF语法主要用于在查询中根据条…

毕业设计项目-古典舞在线交流平台的设计与实现(源码/论文)

项目简介 基于springboot实现的&#xff0c;主要功能如下&#xff1a; 技术栈 后端框框&#xff1a;springboot/mybatis 前端框架&#xff1a;html/JavaScript/Css/vue/elementui 运行环境&#xff1a;JDK1.8/MySQL5.7/idea&#xff08;可选&#xff09;/Maven3&#xff08…

子弹生产线残次品检测系统源码分享

子弹生产线残次品检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

Golang | Leetcode Golang题解之第451题根据字符出现频率排序

题目&#xff1a; 题解&#xff1a; func frequencySort(s string) string {cnt : map[byte]int{}maxFreq : 0for i : range s {cnt[s[i]]maxFreq max(maxFreq, cnt[s[i]])}buckets : make([][]byte, maxFreq1)for ch, c : range cnt {buckets[c] append(buckets[c], ch)}an…

ATAM需求说明-系统架构师(七十六)

1体系结构权衡分析法ATAM(Architecture Trade Off Analyzer Method)是一种常见的结构权衡分析法&#xff0c;该框架主要关注系统的&#xff08;&#xff09;&#xff0c;针对性能、安全性、可用性和可修改性&#xff0c;在系统开发前进行分析、评价和这种。 A 需求说明 B 架构…