Elasticsearch5.5.1 使用JEST客户端高亮显示

高亮显示是在结果文档中显示查询中的哪个或哪些单词被匹配的过程。先来看看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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值