什么是高亮显示
根据关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮百度搜索关键字"elasticsearch"
京东商城搜索“iphone xs max”
高亮显示html分析
通过开发者工具查看高亮数据的html代码实现:
高亮显示实现
编程步骤
创建Settings配置信息对象
创建ES传输客户端对象
创建搜索请求构建对象(封装查询条件、设置高亮对象)
执行请求,得到搜索响应对象
获取搜索结果
迭代搜索结果(获取高亮内容)
释放资源
代码实现
/**
*
* 高亮显示
* 注意:如果需要高亮显示,必须带关键词查询的!!!
* @throws Exception
*/
@Test
public void test8() throws Exception {
//1. 创建Settings配置信息对象
Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
//2. 创建ES传输客户端对象
TransportClient transportClient = new PreBuiltTransportClient(settings);
transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"),9300));
//3. 创建搜索请求构建对象(封装查询条件)(***)
SearchRequestBuilder searchRequestBuilder = transportClient.prepareSearch("blog3").setTypes("article");
searchRequestBuilder.setQuery(QueryBuilders.queryStringQuery("分布式"));
//一、先设计高亮的样式: 笔记本
//HighlightBuilder: 构建高亮的样式
HighlightBuilder highlightBuilder = new HighlightBuilder();
//1.1 需要高亮的Field名称(可以是1个或n个)
highlightBuilder.field("title").field("content");
//1.2 前缀
highlightBuilder.preTags("");
//1.3 后缀
highlightBuilder.postTags("");
searchRequestBuilder.highlighter(highlightBuilder);
//二、执行关键词查询
//4. 执行请求,得到搜索响应对象
SearchResponse searchResponse = searchRequestBuilder.get();
//5. 获取搜索结果
SearchHits hits = searchResponse.getHits();
//6. 迭代搜索结果
System.out.println("总命中数:"+hits.totalHits);
for(SearchHit hit:hits){
//三、获取高亮内容,进行展示
/**
* {
* "title":"笔记本",
* "content":"笔记本"
* }
*/
Map highlightFields = hit.getHighlightFields();
//取出结果
//System.out.println(hit.getSourceAsMap());
System.out.println(hit.getSourceAsMap().get("id"));
//展示高亮的内容:highlightFields.get("title").getFragments()[0].toString()
//判断该内容有没有高亮
if(highlightFields.get("title")!=null){
System.out.println(highlightFields.get("title").getFragments()[0].toString());
}else{
System.out.println(hit.getSourceAsMap().get("title"));
}
if(highlightFields.get("content")!=null){
System.out.println(highlightFields.get("content").getFragments()[0].toString());
}else{
System.out.println(hit.getSourceAsMap().get("content"));
}
System.out.println("===================");
}
//7. 释放资源
transportClient.close();
}
运行结果: