Elasticsearch查询结果高亮操作实战
Posted 杨 戬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch查询结果高亮操作实战相关的知识,希望对你有一定的参考价值。
文章目录
高亮显示
什么是高亮显示?
在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮
百度搜索关键字"狂飙",如下所示:
或者在淘宝搜索“手机”,如下所示:
我们可以发现搜索的关键字在搜索到的信息上都变成了红色高亮
高亮显示原理
通过开发者工具查看高亮数据的html代码实现:
ElasticSearch可以对查询出的内容中关键字部分进行标签和样式的设置,但是你需要告诉ElasticSearch使用什么标签对高亮关键字进行包裹
代码实现
这里要用到ElasticSearch的高亮数据对象HighlightBuilder
- 构建一个HighlightBuilder对象
- 设置高亮字段(title)
- 使用
preTags
设置高亮前缀(<font color=’red’>
),postTags
设置高亮后缀(</font>
) - 将高亮添加到
searchRequestBuilder
// 设置高亮数据
HighlightBuilder hiBuilder=new HighlightBuilder();
hiBuilder.field("title");
hiBuilder.preTags("<font style='color:red'>");
hiBuilder.postTags("</font>");
searchRequestBuilder.highlighter(hiBuilder);
完整测试代码如下:
@Test
//高亮查询
public void test11() throws Exception
// 创建Client连接对象
Settings settings = Settings.builder().put("cluster.name", "my‐elasticsearch").build();
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),
9300));
// 搜索数据
SearchRequestBuilder searchRequestBuilder = client
.prepareSearch("blog").setTypes("article")
.setQuery(QueryBuilders.termQuery("title", "要高亮的关键词"));
//设置高亮数据
HighlightBuilder hiBuilder=new HighlightBuilder();
hiBuilder.preTags("<font style='color:red'>");
hiBuilder.postTags("</font>");
hiBuilder.field("title");
searchRequestBuilder.highlighter(hiBuilder);
//获得查询结果数据
SearchResponse searchResponse = searchRequestBuilder.get();
//获取查询结果集
SearchHits searchHits = searchResponse.getHits();
System.out.println("共搜到:"+searchHits.getTotalHits()+"条结果!");
//遍历结果
for(SearchHit hit:searchHits)
System.out.println("String方式打印文档搜索内容:");
System.out.println(hit.getSourceAsString());
System.out.println("Map方式打印高亮内容");
System.out.println(hit.getHighlightFields());
System.out.println("遍历高亮集合,打印高亮片段:");
Text[] text = hit.getHighlightFields().get("title").getFragments();
for (Text str : text)
System.out.println(str);
//释放资源
client.close();
以上是关于Elasticsearch查询结果高亮操作实战的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch能检索出来,但不能正确高亮怎么办?