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