elasticsearch高亮显示

我使用的是RestHighLevelClient,直接上代码吧json

一、actionapp

@RequestMapping(value = "/test2.do")
    public void test2(){
        List<PortalVO> list = new ArrayList<PortalVO>();
        //指定索引库类型
        SearchRequest searchRequest = new SearchRequest("ctpsp_tendernotice").types("portal_tendernotice");
        String searchKey = "公告";
        String highlightField = "businessObjectName";
        Integer pageNo = 0;
        Integer pageSize = 15;
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        QueryBuilder queryBuilder1=QueryBuilders.matchPhraseQuery("businessObjectName", "公告");
        QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(queryBuilder1);
        sourceBuilder.query(queryBuilder);
        SearchHits hit = searchClient.highlightSearch(searchRequest, sourceBuilder, highlightField, pageNo, pageSize);
        SearchHit[] hits = hit.getHits();
        long total = hit.totalHits;
        System.out.println(total);
        for (SearchHit searchHit : hits) {
            //将文档中的每个对象转换json串值
            String sourceAsString = searchHit.getSourceAsString();
            //将json串值转换成对应的实体对象
            PortalVO vo = JSON.parseObject(sourceAsString, PortalVO.class);
            //获取对应的高亮域
            Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
            //高亮字段
            HighlightField highlightAddress = highlightFields.get(highlightField);
            if(highlightAddress!=null){
                // 为title串值增长自定义的高亮标签
                Text[] titleTexts = highlightAddress.fragments();
                String businessObjectName = "";
                for (Text text : titleTexts) {
                    businessObjectName += text;
                }
                //将追加了高亮标签的串值从新填充到对应的对象
                vo.setBusinessObjectName(businessObjectName);
            }
            list.add(vo);
        }
        for(int i = 0;i < list.size(); i++){
            PortalVO vo = list.get(i);
            System.out.println(vo.getBusinessObjectName());
        }
    }post

二、serviceui

/**
     * 高亮显示
     * @param searchRequest
     * @param queryBuilder 查询内容
     * @param highlightField 高亮字段
     * @param pageNo
     * @param pageSize 每页显示多少条
     * @return
     */
    public SearchHits highlightSearch(SearchRequest searchRequest,SearchSourceBuilder searchSourceBuilder,String highlightField,Integer pageNo,Integer pageSize){
        try {
            //搜索体(能够添加多个搜索参数)
            //构建高亮体
            HighlightBuilder highlightBuilder = new HighlightBuilder();
            highlightBuilder.preTags("<span style=\"color:red\">");
            highlightBuilder.postTags("</span>");
            //高亮字段
            highlightBuilder.field(highlightField);
            //搜索体(添加多个搜索参数)
            searchSourceBuilder.highlighter(highlightBuilder);
            searchRequest.source(searchSourceBuilder);
            searchSourceBuilder.from(pageNo).size(pageSize);
            //执行查询
            SearchResponse response = client.search(searchRequest);
            //获取搜索的文档结果
            SearchHits hit = response.getHits();
            return hit;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    } spa