开发者学堂课程【ElasticSearch 入门精讲:高亮 highlight】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/631/detail/9997
高亮 highlight
内容介绍:
一、讲义
二、演示
一、讲义
高亮达到的效果可以通过搜索 elasticsearch 进行查看
查询索引库的时候会有高亮显示
public void test
S
earch() {
S
tring indices="bigdata";//指的是要搜索的哪一个索引库
SearchRequestBuilder builder=client.prepareSearch(indices)
.setSearchType(SearchType.DEFAULT)
.setFrom(0)
.setsize(5)//设置分页
.addHigh1ightedFie1d("name")//设置高亮字段
.setHighlighterPreTags("<font style='color:red;size=35'>")
.setHighlighterPostTags("</font>");//高亮风格
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<string,object>source=searchHit.getsource();
Map<string,HighlightField>highlightFields=searchHit.ge
t
HighlightFields();
System.out.printIn("------------------");
S
tring name=source.get("name").tostring();
S
tring author=source.get("author").tostring();
System.out.printIn("name="+name);
System.out.printIn("author="+author);
HighlightField highlightField= highlightFields.get("name");
if(highlightField!=null){
Text[] fragments=highlightField.fragments();
name="";
for(Text text:fragments){
name += text.tostring();
}
}
System.out.printInC"name: "+name);
System.out.printIn("author: "+author);
}
}
二、演示
现在要将检索信息 bank 下的 product,name 开头为 s 的显示高亮
如何进行高亮显示?
在桌面上右击新建文本文档,命名为 testHightLight.html,之后编辑输入
<h2>测试<font style="color:red;size=20;" >高亮</font>显示了哦</h2>
之后通过浏览器打开页面
程序的高亮显示,在 TestES.java 中输入
/**
*测试高亮显示
*
*查询索引库之 bigdata 下的 type 之 product,其中 name 字段中以 s 开头的字段需要高亮显示
*/
public void testHightLighter(){
//步骤:
//1.构建 HighlightBuilder 的实例,设置高亮显示的参数
HightlightBuilder hb = new HighlightBuilder();
hb.field("name"")
.preTags("<font stype='color:red;size=20;>"")
.postTags("</font>");
//2.查询
SearchResponse response = client.prepareSearch(INDEX)
.setTypes( TYPE)
.setFrom(
0
)
.setSize(1000)
.setQuery(QueryBuilders.wildcardQuery
(
name: "name", query: s*")
)
//设置高亮显示
.highligh
ter(hb)
.get();
//3.分析结果
for(SearchHit hit: response.getHits
()
){
Map<String,Object> map = hit.getSourceAsMap(); Map<String,HighlightField> highlightFields = hit.getHighlightFields();
for(Map.Entry<String,HighlightField> fieldEntry: highlightFields.entrySet())Xstring key = fieldEntry.getKey0;
String value = fieldEntry.getValue().fragments()[0].toString();
//替换value(带了高亮显示)
map.put(key,value);
}
//显示
System.out.println(JSON.toJSONString(map));
}
}
运行之后结果应该显示出三个带 s 的 name,
如图