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

news2024/10/6 7:55:24

引言:

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

如下:

我们要简单实现这个效果很简单,可以通过多种办法,这里通过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.coloradmin.cn/o/2191451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FRP搭建内网穿透:云服务端 + 家用Linux/Windows主机【2024】

介绍 FRP是一个可以自己搭建内网穿透服务的开源项目&#xff0c;开源地址直达&#xff1a; FRP-GitHub 实际上frp由两个程序组成 ①frps:在服务端运行的程序 ②frpc:在客户端运行的程序 运作方式示意图如下 服务端 因为服务上使用了1Panel面板&#xff0c;直接在应用商店安…

每日一题|134. 加油站|循环数组单次遍历

本题题目比较绕&#xff0c;理解了之后发现就是给一个一维数组表示余量&#xff0c;找出能够首尾相连且后构成每个位置处的累积和都是正数的索引。 首先&#xff0c;根据cost和gas相减&#xff0c;确定每个位置出发去下一个位置所剩余的gas。 这里可以直接统计全部的余量和&…

【德国EnMAP高光谱卫星】

德国EnMAP&#xff08;Environmental Mapping and Analysis Program&#xff09;高光谱卫星是德国在地球观测领域的一项重要成就&#xff0c;以下是对该卫星的详细介绍&#xff1a; 一、基本信息 发射时间&#xff1a;2022年4月1日研发机构&#xff1a;由德国航空航天中心&a…

【多模态项目实战】-模态表示:基于对应表示的跨模态检索(图文互搜)

【多模态项目实战】-模态表示&#xff1a;基于对应表示的跨模态检索 文章目录 【多模态项目实战】-模态表示&#xff1a;基于对应表示的跨模态检索1.任务介绍2.跨模态检索技术简介3.模型训练流程3.1读取数据1)下载数据集&#x1f680;2)整理数据集3)定义数据集类4)批量读取数据…

zutilo不支持zotero7,zotero7实现复制条目链接方法。

更新zotero7后原来的zutilo插件失效了&#xff0c;为其中复制条目链接这个功能修改了一个脚本&#xff0c;仅粘贴链接&#xff0c;无标题。 {"translatorID": "2de2b1a5-5725-494c-9224-5781cdf9b7ef","label": "Markdown ZotSelect"…

读数据湖仓08数据架构的演化

1. 数据目录 1.1. 需要将分析基础设施放置在数据目录(Data Catalogue)的结构中 1.1.1. 元数据 1.1.2. 数据模型 1.1.3. 本体 1.1.4. 分类标准 1.2. 数据目录类似于图书馆的图书检索目录 1.2.1. 先通过图书馆的图书检索目录进行查找&#xff0c;以便快速找到所需的图书 1…

《深度学习》OpenCV 摄像头OCR 过程及案例解析

目录 一、摄像头OCR 1、含义 2、一般操作步骤 1&#xff09;安装OpenCV库 2&#xff09;设置摄像头 3&#xff09;图像采集 4&#xff09;图像预处理 5&#xff09;文本识别 6&#xff09;文本处理 7&#xff09;结果显示 二、案例实现 1、定义展示图像函数 2、定…

CANoe_TestModule截图功能TestReportAddWindowCapture

前言 TestReportAddWindowCapture方法作为CAPL脚本中的一个重要功能&#xff0c;其能够将指定窗口的屏幕截图添加到测试报告中&#xff0c;对于记录和验证界面状态具有重要意义。本文将全面解析TestReportAddWindowCapture方法的使用方法、参数解释、示例应用以及注意事项&…

从介质失效看互联网时代的信息过载

来读一篇文章&#xff1a;90年代的硬盘已大规模变砖&#xff0c;没啥好担心的&#xff0c;好事。 结合我两年前的粗浅认知 互联网时代无信息&#xff0c;按照 “动” 的观念看&#xff0c;当信息越来越多&#xff0c;信息密度越来越大时&#xff0c;信息的寿命就会越来越短&am…

智谱AI开源CogView3及升级版,文生图技术新突破!

Ai 智能办公利器 - Ai-321.com 智谱AI近日震撼宣布&#xff0c;向公众开放其最新研发的CogView3及进阶版CogView-3Plus-3B&#xff0c;这两款模型无疑为文本转图像技术领域带来了革命性的突破。 人工智能 - Ai工具集 - 全球热门人工智能软件ai工具集合网站 CogView3作为首款运…

PMP--三模--解题--161-170

文章目录 10.沟通管理--沟通管理计划--沟通管理计划是项目管理计划的组成部分&#xff0c;描述将如何规划、结构化、执行与监督项目沟通&#xff0c;以提高沟通的有效性。该计划包括如下信息&#xff1a;干系人的沟通需求。--凡信息&#xff0c;找沟通。161、 [单选] 一家公司的…

【X线源】微焦点X射线源的基本原理

【X线源】微焦点X射线源的基本原理 1.背景2.原理 1.背景 1895年11月8日&#xff0c;德国物理学家威廉伦琴在研究阴极射线时偶然发现了X射线。当时&#xff0c;他注意到阴极射线管附近的荧光屏发出了光&#xff0c;即使它被纸板遮挡住。经过进一步实验&#xff0c;他意识到这种…

开源模型应用落地-模型微调-模型研制-模型训练(二)

一、前言 模型训练是深度学习领域中的关键环节。随着技术的发展,预训练模型的出现极大地改变了模型构建的格局。这些预训练模型在大规模数据集上进行了初步的学习,蕴含了丰富的通用知识。然而,不同的实际应用场景有着各自独特的需求。例如在医疗影像诊断领域,预训练模型可能…

Linux和指令初识

前言 Linux是我们在服务器中常用的操作系统&#xff0c;我们有必要对这个操作系统有足够的认识&#xff0c;并且能够使相关的指令操作。今天我们就来简单的认识一下这个操作的前世今生&#xff0c;并且介绍一些基础的指令操作 Linux的前世今生 要说Linux&#xff0c;还得从U…

GitLab flow工作流及其使用

问题背景 Git flow和Github flow及其问题 使用GitLab flow 目录 什么是GitLab工作流 功能分支 生产分支 使用GitLab flow环境分支 使用GitLab flow发布分支 使用GitLab flow合并/拉取请求 使用GitLab flow进行问题跟踪 链接和关闭合并请求中的问题 用rebase压缩提交…

ElasticSearch备考 -- Multi field

一、题目 Create the index hamlet_2 with one primary shard and no replicas Copy the mapping of hamlet_1 into hamlet_2, but also define a multi-field for speaker. The name of such multi-field is tokens and its data type is the (default) analysed string Reind…

【工程测试技术】第6章 信号处理初步,频谱分析,相关系数

目录 6.1 数字信号处理的基本步骤 6.2 离散信号及其频谱分析 6.2.1 概述 6.2.2 时域采样、混叠和采样定理 6.2.3 量化和量化误差 6.2.4 截断、泄漏和窗函数 6.2.5 频域采样、时域周期延拓和栅栏效应 6.2.6 频率分辨率、整周期截断 6.3 相关分析及其应用 6.3.1 两…

Emissive CEO Fabien Barati谈《消失的法老》背后的故事:XR大空间体验的创新与未来

在最近的一次播客访谈中,虚拟现实之声(Voices of VR)的主持人Kent Bye与Emissive公司的联合创始人兼CEO Fabien Barati进行了深入交流。Emissive是全球顶级的VR大空间体验制作商之一,以其沉浸式探险项目如《永恒的巴黎圣母院》和《胡夫地平线》而闻名。以下是这次访谈的核心…

VSCode debug模式无法跳转进入内置模块

在使用VSCode调试python代码的时候&#xff0c; 需要查看第三方库的代码&#xff0c;进行调试。 但是VSCode默认是不进入的&#xff0c; 因此需要更改Debug配置&#xff1a; 在launch.json 里加入如下的代码&#xff1a; "justMyCode": false 这样就能进入第三方库…

计算有向无环图中两节点间简单路径的数量

计算有向无环图中两节点间简单路径的数量 主要步骤:伪代码:C代码实现:解释:在给定一个有向无环图(DAG)以及两个节点s和t时,我们需要计算从节点s到节点t之间的简单路径的数量。为了实现这一目标,我们可以使用动态规划的思想,在拓扑排序的基础上解决问题。 主要步骤: 拓…