ElasticSearch查询:高亮显示(10)

什么是高亮显示

  • 根据关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮百度搜索关键字"elasticsearch"

  • 京东商城搜索“iphone xs max”

高亮显示html分析

  • 通过开发者工具查看高亮数据的html代码实现:

高亮显示实现

编程步骤

  • 创建Settings配置信息对象

  • 创建ES传输客户端对象

  • 创建搜索请求构建对象(封装查询条件、设置高亮对象)

  • 执行请求,得到搜索响应对象

  • 获取搜索结果

  • 迭代搜索结果(获取高亮内容)

  • 释放资源

代码实现

/**
     *
     *  高亮显示
     *    注意:如果需要高亮显示,必须带关键词查询的!!!
     * @throws Exception
     */
    @Test
    public void test8() throws Exception {
        //1. 创建Settings配置信息对象
        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();

        //2. 创建ES传输客户端对象
        TransportClient transportClient = new PreBuiltTransportClient(settings);
        transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"),9300));

        //3. 创建搜索请求构建对象(封装查询条件)(***)
        SearchRequestBuilder searchRequestBuilder = transportClient.prepareSearch("blog3").setTypes("article");
        searchRequestBuilder.setQuery(QueryBuilders.queryStringQuery("分布式"));

        //一、先设计高亮的样式: <font color='red'>笔记本</font>
        //HighlightBuilder: 构建高亮的样式
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        //1.1 需要高亮的Field名称(可以是1个或n个)
        highlightBuilder.field("title").field("content");
        //1.2 前缀
        highlightBuilder.preTags("<font color='red'>");
        //1.3 后缀
        highlightBuilder.postTags("</font>");
        searchRequestBuilder.highlighter(highlightBuilder);

        //二、执行关键词查询
        //4. 执行请求,得到搜索响应对象
        SearchResponse searchResponse = searchRequestBuilder.get();

        //5. 获取搜索结果
        SearchHits hits = searchResponse.getHits();

        //6. 迭代搜索结果
        System.out.println("总命中数:"+hits.totalHits);
        for(SearchHit hit:hits){
            //三、获取高亮内容,进行展示
            /**
             * {
             *     "title":"<font color='red'>笔记本</font>",
             *     "content":"<font color='red'>笔记本</font>"
             * }
             */
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();

            //取出结果
            //System.out.println(hit.getSourceAsMap());

            System.out.println(hit.getSourceAsMap().get("id"));
            //展示高亮的内容:highlightFields.get("title").getFragments()[0].toString()

            //判断该内容有没有高亮
            if(highlightFields.get("title")!=null){
                System.out.println(highlightFields.get("title").getFragments()[0].toString());
            }else{
                System.out.println(hit.getSourceAsMap().get("title"));
            }

            if(highlightFields.get("content")!=null){
                System.out.println(highlightFields.get("content").getFragments()[0].toString());
            }else{
                System.out.println(hit.getSourceAsMap().get("content"));
            }

            System.out.println("===================");
        }

        //7. 释放资源
        transportClient.close();

    }

运行结果:

本站资源除特别声明外,转载文章请声明文章出处
东泰博客 » ElasticSearch查询:高亮显示(10)

发表评论