高亮显示

@Test
    public void test() throws Exception {
        // 创建搜索服务器对象
        Client client = TransportClient.builder().build()
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
        // 搜索数据
        SearchRequestBuilder searchRequestBuilder = client.prepareSearch("blog1").setTypes("article")
                .setQuery(QueryBuilders.termQuery("title", "琐"));
        
        //定义高亮显示
        searchRequestBuilder.addHighlightedField("title");    //前置元素高亮
        searchRequestBuilder.setHighlighterPreTags("<em>");    //前置元素
        searchRequestBuilder.setHighlighterPostTags("</em>");//后置元素
        
        //发送给服务器
        SearchResponse searchResponse = searchRequestBuilder.get();
        
        // 获取命中次数,查询结果有多少对象
        SearchHits hits = searchResponse.getHits();
        System.out.println("查询结果有"+hits.getTotalHits()+"条");
        //遍历查询结果
        Iterator<SearchHit> iterator = hits.iterator();
        //获取json转换对象
        ObjectMapper objectMapper = new ObjectMapper();
        while(iterator.hasNext()) {
            //获取到每个查询对象
            SearchHit hit = iterator.next();
            //将高亮处理后的内容替换原有内容
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            HighlightField titleField = highlightFields.get("title");
            // 获取到原有内容中 每个高亮显示 集中位置 fragment 就是高亮片段
            Text[] fragments = titleField.fragments();
            String title = "";
            for (Text text : fragments) {
                System.err.println(text);
                title += text;
            }
            // 将查询结果转换为对象
            Article article = objectMapper.readValue(hit.getSourceAsString(), Article.class);
            //用高亮显示后的内容替换原有内容
            article.setTitle(title);
            System.out.println(article);
        }
        //关闭连接
        client.close();
    }
原文地址:https://www.cnblogs.com/learnjfm/p/7327823.html