Elasticsearch5.5.1 使用JEST客户端高亮显示
2017-09-05 15:59
555 查看
高亮显示是在结果文档中显示查询中的哪个或哪些单词被匹配的过程。先来看看ES的脚本是如何显示高亮的:
数据如下:
在Sense中执行如下脚本
GET http://localhost:9200/article/content/_search {
"query" : {
"term" : {
"view" : "100"
}
},
"highlight" : {
"pre_tags" : [ "<em>" ],
"post_tags" : [ "</em>" ],
"fields" : {
"view" : {}
}
}
}
输出如下:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.9808292,
"hits": [
{
"_index": "article",
"_type": "content",
"_id": "AV5Qs4GbXljy_f1_Lvwl",
"_score": 0.9808292,
"_source": {
"author": "AAAA",
"titile": "中国获租巴基斯坦瓜达尔港2000亩土地 为期43年",
"tag": "JAVA,ANDROID,C++,LINUX",
"content": "据了解,瓜达尔港务局于今年6月完成了1500亩土地的征收工作,另外500亩的征收工作也将很快完成",
"view": "100",
"date": "2017-09-05T14:21:34"
},
"highlight": {
"view": [
"<em>100</em>"
]
}
}
]
}
}
view中的值被加入了<em>标签.
注意:
要高亮显示的内容必须要包含在你查询的内容中,如果不在,就不能正确的显示。以下就是一个反例:
那么如何使用Jest客户端来高亮显示了?具体代码如下:
private static JestClient jestClient;
private static String indexName = "article";
private static String typeName = "content";
@Before
public void getClient() throws Exception{
JestClientFactory factory = new JestClientFactory();
factory.setHttpClientConfig(new HttpClientConfig
.Builder("http://localhost:9200")
.gson(new GsonBuilder().setDateFormat("yyyy-MM-dd'T'hh:mm:ss").create())
.connTimeout(1500)
.readTimeout(3000)
.multiThreaded(true)
.build());
jestClient=factory.getObject();
}
/**
* 搜索高亮显示
* @throws Exception
*/
@Test
public void createSearch() throws Exception {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("view", "200"));
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("view");//高亮title
highlightBuilder.preTags("<em>").postTags("</em>");//高亮标签
highlightBuilder.fragmentSize(500);//高亮内容长度
searchSourceBuilder.highlighter(highlightBuilder);
System.out.println(searchSourceBuilder.toString());
Search search = new Search.Builder(searchSourceBuilder.toString())
.addIndex(indexName)
.build();
SearchResult result = jestClient.execute(search);
System.out.println(result.getJsonString());
System.out.println("本次查询共查到:"+result.getTotal()+"篇文章!");
List<Hit<CsdnBlog,Void>> hits = result.getHits(CsdnBlog.class);
System.out.println(hits.size());
for (Hit<CsdnBlog, Void> hit : hits) {
CsdnBlog source = hit.source;
//获取高亮后的内容
Map<String, List<String>> highlight = hit.highlight;
List<String> views = highlight.get("view");//高亮后的title
if(views!=null){
source.setView(views.get(0));
}
System.out.println("标题:"+source.getTitile());
System.out.println("内容:"+source.getContent());
System.out.println("浏览数:"+source.getView());
System.out.println("标签:"+source.getTag());
System.out.println("作者:"+source.getAuthor());
}
}
输出如下:
标题:中国获租巴基斯坦瓜达尔港2000亩土地 为期43年
内容:据了解,瓜达尔港务局于今年6月完成了1500亩土地的征收工作,另外500亩的征收工作也将很快完成
浏览数:<em>200</em>
标签:JAVA,ANDROID,C++,LINUX
作者:BBBB
数据如下:
在Sense中执行如下脚本
GET http://localhost:9200/article/content/_search {
"query" : {
"term" : {
"view" : "100"
}
},
"highlight" : {
"pre_tags" : [ "<em>" ],
"post_tags" : [ "</em>" ],
"fields" : {
"view" : {}
}
}
}
输出如下:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.9808292,
"hits": [
{
"_index": "article",
"_type": "content",
"_id": "AV5Qs4GbXljy_f1_Lvwl",
"_score": 0.9808292,
"_source": {
"author": "AAAA",
"titile": "中国获租巴基斯坦瓜达尔港2000亩土地 为期43年",
"tag": "JAVA,ANDROID,C++,LINUX",
"content": "据了解,瓜达尔港务局于今年6月完成了1500亩土地的征收工作,另外500亩的征收工作也将很快完成",
"view": "100",
"date": "2017-09-05T14:21:34"
},
"highlight": {
"view": [
"<em>100</em>"
]
}
}
]
}
}
view中的值被加入了<em>标签.
注意:
要高亮显示的内容必须要包含在你查询的内容中,如果不在,就不能正确的显示。以下就是一个反例:
那么如何使用Jest客户端来高亮显示了?具体代码如下:
private static JestClient jestClient;
private static String indexName = "article";
private static String typeName = "content";
@Before
public void getClient() throws Exception{
JestClientFactory factory = new JestClientFactory();
factory.setHttpClientConfig(new HttpClientConfig
.Builder("http://localhost:9200")
.gson(new GsonBuilder().setDateFormat("yyyy-MM-dd'T'hh:mm:ss").create())
.connTimeout(1500)
.readTimeout(3000)
.multiThreaded(true)
.build());
jestClient=factory.getObject();
}
/**
* 搜索高亮显示
* @throws Exception
*/
@Test
public void createSearch() throws Exception {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("view", "200"));
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("view");//高亮title
highlightBuilder.preTags("<em>").postTags("</em>");//高亮标签
highlightBuilder.fragmentSize(500);//高亮内容长度
searchSourceBuilder.highlighter(highlightBuilder);
System.out.println(searchSourceBuilder.toString());
Search search = new Search.Builder(searchSourceBuilder.toString())
.addIndex(indexName)
.build();
SearchResult result = jestClient.execute(search);
System.out.println(result.getJsonString());
System.out.println("本次查询共查到:"+result.getTotal()+"篇文章!");
List<Hit<CsdnBlog,Void>> hits = result.getHits(CsdnBlog.class);
System.out.println(hits.size());
for (Hit<CsdnBlog, Void> hit : hits) {
CsdnBlog source = hit.source;
//获取高亮后的内容
Map<String, List<String>> highlight = hit.highlight;
List<String> views = highlight.get("view");//高亮后的title
if(views!=null){
source.setView(views.get(0));
}
System.out.println("标题:"+source.getTitile());
System.out.println("内容:"+source.getContent());
System.out.println("浏览数:"+source.getView());
System.out.println("标签:"+source.getTag());
System.out.println("作者:"+source.getAuthor());
}
}
输出如下:
标题:中国获租巴基斯坦瓜达尔港2000亩土地 为期43年
内容:据了解,瓜达尔港务局于今年6月完成了1500亩土地的征收工作,另外500亩的征收工作也将很快完成
浏览数:<em>200</em>
标签:JAVA,ANDROID,C++,LINUX
作者:BBBB
相关文章推荐
- ElasticSearch(10)--使用Java客户端进行高亮显示
- 使用elasticsearch 2.1 和 java客户端 jest 建立springmvc项目
- Elasticsearch及java客户端jest使用
- ExpandableListView的使用以及信息的高亮显示
- ExpandableListView的使用以及信息的高亮显示
- ElasticSearch 高亮显示大文档搜索结果的策略和性能对比(译)
- Myeclipse 高亮显示使用的变量
- CKEditor使用Code Snippet让代码高亮显示
- ElasticSearch(8)--使用Java客户端进行复杂查询
- 使用gp部署bginfo在客户端显示信息
- 使用codemirror对xml进行高亮显示
- 使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
- ElasticSearch(6)--使用Java客户端创建索引和映射
- ElasticSearch之高亮显示
- elasticsearch JAVA客户端操作---搜索的过滤、分组高亮
- 使用prettify为编辑器xhEditor添加代码(code)高亮显示
- 使用dp.SyntaxHighlighter显示高亮语法
- 分布式搜索elasticsearch java API 之 highlighting (对搜索结果的高亮显示)
- Elasticsearch系列(十一)----Spring整合Elasticsearch5.5.1的TransportClient客户端
- 使用 highlight.js 在网页中高亮显示java 代码 【原】