springboot整合elasticsearch并高亮显示(layui页面)

前面安装的话很复杂我就不去写博客,我这里有资料,如果你们需要的话我可以发给你们,到时候留言就好了!!!

开始下面的教程吧!!!

我们都知道springboot一开始的步骤都是从pom文件开始的。

pom.xml文件引入的依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入模板引擎thymeleaf-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.15</version>
        </dependency>
    </dependencies>

这只是简单的使用了一下  所以application.yml就没有配置了 

 

当然你使用ES的时候肯定是得连接服务器的

@Component
public class ESConfig {

    private TransportClient transportClient;
    public TransportClient getClient() throws UnknownHostException {
        //连接服务器 cluster.name,my-application这俩个参数是你ES配置文件中的参数,如果你没修改的话这是默认的
        //java连接的端口是9300   
        transportClient=new PreBuiltTransportClient(Settings.builder().put("cluster.name","my-application").build())
                            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.254.137"),9300));
        return transportClient;
    }


}

实体类:

//记得提供get、set方法
public class Log {
    private Integer prod_id;
    private String prod_name;
    private String prod_type;
    private String prod_batch;
    private String prod_unit;
    private String prod_price;
    private String prod_memo;
}

直接来看操作吧

Controller层:

@Controller
public class EsController {

    @Autowired
    ESConfig esConfig;

    @RequestMapping("/getes")
    @ResponseBody
    public Map<String,Object> getEs(String prod_name) throws Exception {
        //读取那个索引
        SearchRequestBuilder searchRequestBuilder=esConfig.getClient().prepareSearch("blog");
        searchRequestBuilder.setTypes("log");
        //设置每批读取的数据量
        searchRequestBuilder.setSize(1000);
        //默认是查询所有
        //searchRequestBuilder.setQuery(QueryBuilders.queryStringQuery("*:*"));
        //设置search context维护3分钟的有效期
        searchRequestBuilder.setScroll(TimeValue.timeValueMillis(3));
        //查询时间范围内的数据
        //RangeQueryBuilder builder=QueryBuilders.rangeQuery("crawlerdate").from("2019-02-21").to("2019-03-01");
        //根据prod_name来精确查询

        MatchPhraseQueryBuilder builder=null;
        if(!StringUtils.isEmpty(prod_name)){
            builder=QueryBuilders.matchPhraseQuery("prod_name",prod_name);
        }else{
            //默认是查询所有
            //searchRequestBuilder.setQuery(QueryBuilders.queryStringQuery("*:*"));
            //这里你可以使用jdbc去连接数据库做查询  然后展现到前段页面 因为我这里没写也就不贴代码了
            builder=QueryBuilders.matchPhraseQuery("prod_name","");
        }

        //根据prod_name来查询
        //MatchQueryBuilder builder = QueryBuilders.matchQuery("prod_name", "幻想笔记本电脑");

        //设置高亮字段
        HighlightBuilder highlightBuilder=new HighlightBuilder()
                .field("prod_name")
                .preTags("<span style='color:red;font-weight:bold;font-size:15px;'>").postTags("</span>");


        //获得首次查询结果
        SearchResponse response=searchRequestBuilder.highlighter(highlightBuilder).setQuery(builder).setPostFilter(builder).get();
        System.out.println("命中总数量:"+response.getHits().getTotalHits());
        SearchHits hits = response.getHits();

        List<Map<String,Object>> list=new ArrayList<>(15);
        for (SearchHit hit:hits){
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            if(!StringUtils.isEmpty(prod_name)){
                Text[] prod_names = hit.getHighlightFields().get("prod_name").getFragments();
                String hight="";
                if(prod_names!=null){
                    for (Text str:prod_names){
                        hight+=str;
                    }
                }
                sourceAsMap.put("prod_name",hight);
            }
            list.add(sourceAsMap);
        }
        SearchResponse response1=esConfig.getClient().prepareSearch("blog").setTypes("log")
                                    .setQuery(builder).setPostFilter(builder).get();

        Map<String,Object> map=new HashMap<>();
        map.put("code",0);
        map.put("msg","");
        map.put("count",response1.getHits().getTotalHits());
        map.put("data",list);
        return map;
    }

    @RequestMapping("/")
    public String get(){
        return "index";
    }

}

效果:

springboot整合elasticsearch并高亮显示(layui页面)

我这就没很多数据了

如果你要导入数据的话可以看这篇https://blog.csdn.net/qq_41594146/article/details/88615977   他这里整合的是多张表的,你对这改一下就好了