java中使用elasticsearch实现高亮查询其实很简单

添加高亮查询

最后有完整代码奥
红色框的地方不能少
在这里插入图片描述

核心思想,就是把原来的字段用高亮字段去替换

在这里插入图片描述
接下来就是把高亮字段替换掉原来map的字段
在这里插入图片描述
直接上完整代码

    //2、从索引库获取数据实现搜索功能
    public ResponseResult search(String keywords,int pageNo,int pageSize) throws IOException {
        if (pageNo<=1){
            pageNo=1;
        }

        //条件搜索
        SearchRequest goods = new SearchRequest("ceshi");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //分页
        builder.from(pageNo);
        builder.size(pageSize);

        TermQueryBuilder title = QueryBuilders.termQuery("content", keywords);
        builder.query(title);
        builder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("content");//高亮的字段
        highlightBuilder.requireFieldMatch(false);//是否多个字段都高亮
        highlightBuilder.preTags("<span style='color:red'>");//前缀后缀
        highlightBuilder.postTags("</span>");
        builder.highlighter(highlightBuilder);

        //执行搜索
        goods.source(builder);
        SearchResponse search = client.search(goods, RequestOptions.DEFAULT);
        //解析结果
        ArrayList<Map<String,Object>> list = new ArrayList<>();
        for (SearchHit hit : search.getHits().getHits()) {
            //解析高亮的字段
            //获取高亮字段
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            System.out.println("=========="+highlightFields);
            HighlightField content = highlightFields.get("content");
            System.out.println("==content=="+content);
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();//原来的结果
            //将原来的字段替换为高亮字段即可
            if (content!=null){
                Text[] fragments = content.fragments();
                String newTitle = "";
                for (Text text : fragments) {
                    newTitle +=text;
                }
                sourceAsMap.put("content",newTitle);//替换掉原来的内容
            }
           list.add(sourceAsMap);
        }
        return ResponseResult.success("搜索成功").setData(list);

    }
©️2020 CSDN 皮肤主题: 1024 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值