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

来源:互联网 发布:cad专业绘图软件 编辑:程序博客网 时间:2024/06/16 18:06

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