@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(); }