elasticsearch实现网页搜索关键字高亮

news/2024/7/10 2:21:50 标签: vue, java, elasticsearch, 搜索引擎

elasticsearch_2">elasticsearch实现网页搜索关键字高亮

上一篇博客,我们学习了 实现在网页中搜索elasticsearch中的数据并显示在网页上

请查看源码:github源码地址

接下来,我们就把关键字设置成高亮吧。只展示关键部分的代码,具体请查看源码。

1.编写Service

java"> //高亮

    public List<Map<String, Object>> searchPageHighlightBuilder(String keyword, int pageNo, int pageSize) throws IOException {

        if (pageNo <= 1) {
            pageNo = 1;
        }
        //条件搜索。

        SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

        //分页
        sourceBuilder.from(pageNo);
        sourceBuilder.size(pageSize);

        //精准匹配
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", keyword);
        sourceBuilder.query(termQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

          //高亮
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("name");
        highlightBuilder.requireFieldMatch(false);//关闭多个高亮,显示一个即可。
        highlightBuilder.preTags("<span style='color:red'>");
        highlightBuilder.postTags("</span>");
        sourceBuilder.highlighter(highlightBuilder);

        //执行搜索
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);


        //结果解析
        ArrayList<Map<String, Object>> list = new ArrayList<>();
        for (SearchHit hit : searchResponse.getHits().getHits()) {

            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            HighlightField name = highlightFields.get("name");
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();//原来的结果
            //解析高亮字段
           if(name != null){
               Text[] fragments = name.fragments();
                String n_name = "";
                for(Text text : fragments){
                    n_name +=  text;
                }
                sourceAsMap.put("name",n_name);
           }

           list.add(sourceAsMap);
        }
        return list;
    }

1.在网页中使用Vue的 v-html来解析标签。

java"><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<body>
<div id="app">
  <input type="text" v-model="keyword">
<input type="button" @click="searchKey" value="搜索">
    <hr/>
    <p>{{keyword}}</p>
    <hr/>

    <p v-for="item in arr">
        图片 :{{"http://pic.netbian.com"+item.img}}
        <a v-html="item.name"></a>
        <img :src="'http://pic.netbian.com'+item.img">
    </p>

    <hr/>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            keyword: '搜索的内容',      //搜索的关键字
            arr: ["初始数据1","初始数据2","初始数据3"]      //搜索的结果
        },
    methods: {
        searchKey(){
              var keyword = this.keyword;
              console.log(keyword);
               //对接后端的接口
            axios.get("search/"+keyword+"/1/20").then
            (response=>{
                console.log(response);
                //赋值给result
                this.arr = response.data;
                //console.log(this.arr);
            },function (err){
                console.log(err);
            })
        }
    }
    })

</script>

</body>
</html>

在这里插入图片描述

在这里插入图片描述


http://www.niftyadmin.cn/n/1563721.html

相关文章

数组在函数中的调用_leetcode第33双周赛第三题leetcode1558. 得到目标数组的最少函数调用次数...

leetcode1558. 得到目标数组的最少函数调用次数给你一个与 nums 大小相同且初始值全为 0 的数组 arr &#xff0c;请你调用以上函数得到整数数组 nums 。请你返回将 arr 变成 nums 的最少函数调用次数。答案保证在 32 位有符号整数以内。示例 1&#xff1a;输入&#xff1a;num…

Linux下实现Apache站点的安全

随着LAMP环境的成熟应用&#xff0c;apache站点的安全性也被提出来了&#xff0c;有时候因为意外的各种原因&#xff0c;会导致站点内的某些信息泄漏&#xff0c;照成不必要的麻烦。所以Apache的安全被提出来&#xff0c;并做了安全提升&#xff0c;apache的安全可以从下面几个…

一款基于星座的app(项目已开源)

一款基于星座的app(项目已开源) 该星座app是大三时期做的期末项目。结果不被老师赏识&#xff0c;说是网上找的&#xff0c;哈哈。文章最后放源码下载地址。 关注公众号回复 &#xff1a; 1003 . 获取源码地址&#xff0c;回复1004&#xff0c;获取app软件的安装包&#xff0…

shiro框架教程(一) 定义,简单上手

shiro框架教程&#xff08;一&#xff09; 定义&#xff0c;简单上手 1.什么是shiro框架&#xff1f; 大家都知道&#xff0c;Apache Shiro是一个强大而灵活的开源安全框架&#xff0c;它干净利落地处理身份认证&#xff0c;授权&#xff0c;企业会话管理和加密。 说简单点&am…

python从字符串中抽取一部分_python如何截取字符串中特定部分

python截取字符串中特定部分的方法&#xff1a;可以使用【str[beginIndex:endPosition]】&#xff0c;其中str为需要截取的字符串&#xff0c;beginIndex为需要截取的第一个字符的下标&#xff0c;endPosition为截取字符最后一个字符的下标。本教程操作环境&#xff1a;windows…

Android开发中目前流行控件和知识点总结

Android开发中目前流行控件和知识点总结 1、SlidingMenu 滑动菜单 应用案例&#xff1a;Facebook 、 Path 2.0 、人人、网易新闻 下载地址&#xff1a; https://github.com/jfeinstein10/SlidingMenu 2、PullToRefresh 下拉刷新 应用案例&#xff1a;新浪微博 等等 &#xff0c…

shiro教程二:spingboot整合shiro实现认证权限的管理。包括密码MD5+salt加密。以及缓存的设置。

shiro教程二&#xff1a;spingboot整合shiro实现认证权限的管理。包括密码MD5salt加密。以及缓存的设置。 在shiro教程一中&#xff0c;我们已经知道了shiro框架的定义及简单上手&#xff0c;接下来我们就进入实战吧&#xff01; 传送门&#xff1a;shiro教程一 关注公众号&a…

windows下 vrrp软件_继续分享一波windows下四款良心软件,极力提高办公效率

最近亲测了几款优质软件&#xff0c;感觉效果蛮好&#xff0c;于是在这里分享给大家。Sharper Scaling—图片处理找了一些以前的照片&#xff0c;发现很模糊&#xff0c;于是找到了它&#xff0c;让图片放大不失真。通过它可以让图片放大后保持清晰的软件了&#xff0c;手法比较…