开发者学堂课程【ElasticSearch 最新快速入门教程:高亮 highlight】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/642/detail/10661
高亮 highlight
主要内容
一、高亮显示
二、程序如何高亮显示
一、高亮形式
1、高亮显示指的是当查询索引库时,索引词就会高亮显示。比如百度输入 elasticsearch
红色部分就是高亮信息
2、ES 查询详解之高亮 highlight
public void testsearch(
)
String indices ="bigdata";
//指的是要搜索的哪一个索引库
searchRequestBuilder builder =client.preparesearch(indices) .setsearchType(SearchType.DEFAULT)
.setFrom(0)
.setsize(5)
//设置分页
.addHighlightedField("name")
//设置高亮字段
.setHighlighterPreTags("
.setHighlighterpostTags("
");
//高亮风格
builder.setQuery( QueryBuilders.fuzzyQuery("name","hadoop"));
SearchResponse searchResponse = builder
.
get();
SearchHits searchHits = searchResponse.getHits();
SearchHit[ ] hits = searchHits.getHits();
long total = searchHits.getTotalHits();
System.out.printin("总共条数:"+total);
//总共查询到多少条数据
for (SearchHit searchHit : hits)
Map source = searchHit.getsource(); Map highlightFields=
searchHit.getHighlightFields();
System.out.print1n("-------------------");
String name = source.get("name").tostring();
String author = source.get("author").tostring();
System.out.print1n("name="+ name);
System.out.print1n("author="+ author);
HighlightField highlightField =
HighlightField.get(“name”)
if (highlightField !=null) {
Text[ ]fragments = highlightField.fragments(); name ="";
for (Text text : fragments)
name += text.tostring();
{
}
System.out.print1n("name:"+ name);
System.out.print1n("author:"+ author);
}
}
3、接下来检索 bank 里的 product,name 会高亮显示出来,加上前缀和后缀。
下面看一下效果,电脑桌面右键-新建-文本文件,文件后缀一般是html,然后编辑一下:
<
h2>
测试
:
red;size=20;”>
高亮
显示了哦!
接下来用浏览器打开页面
这样高亮二字就高亮显示了,和上面的百度搜索界面是类似的。
二、程序如何高亮显示
*测试高亮显示
*需求:查询索引库之 bigdata下的 type 之 product,其中 name 字段中以 s 开头的字段需要高亮信息显示
@Test
public void testHightLighter() {
//步骤:
//1构建 HighlightBuilder 的实例,设置高亮显示的参数
HighlightBuilder hb = new HighlightBuilder();
h
b.field(‘”name”)
.preTage(“”)
.postTage(“
”);
//2查询
SearchResponse response = client.prepareSearch(INDEX)
.setTypes(TYPE)
.setFrom(0)
.setSize(1000)
.setQuery(QueryBuilders.wildcardQuery(name: "name",
query: "s*")
//设置高亮显示
.highlighter(hb)
.get();
//3分析结果
for (SearchHit hit : response.getHits()) {
Map map = hit.getSourceAsMap();
Map highlightFields = hit.getHighlightFields();
for(Map.Entry fieldEntry: highlightFields.entrySet()){
String key = fieldEntry.getKey();
String value = fieldEntry.getValue().fragments()[0].toString();
//替换 value(带了高亮显示)
map.put(key,value);
//显示结果
S
ystem.out.println(JSON.toJSONString(map));
*测试一下会不会高亮显示,按照设置三个以 s 开头的满足条件
那么 name 这个字段就会高亮显示,加前缀和后缀,只有 name 这个字段高亮显示,别的正常显示
storm、sqoop、Speak 都加上了前缀。