栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

elasticsearch实战——实现京东的书籍搜索

elasticsearch实战——实现京东的书籍搜索

了解完基本的索引以及文档的增删改查,接下来该实战搞一搞了,老样子,打开该打开的

想要实现搜索,必须先有数据,第一步,通过网络爬虫获取京东的一些书籍数据:

通过下面代码,获取到书籍网站的 img 信息,price 信息,title 信息,网站如下:https://search.jd.com/Search

@Component
public class HtmlParseUtil {
//    public static void main(String[] args) throws IOException {
//        new HtmlParseUtil().parseJd("vue").forEach(System.out::println);
//    }
    public List parseJd(String keyswords) throws IOException {
        //        获取请求
        String url = "https://search.jd.com/Search?keyword=" + keyswords;
//        解析网页
        document document = Jsoup.parse(new URL(url), 30000);
        Element element = document.getElementById("J_goodsList");
//        System.out.println(element);
//        获取所有的 li 元素
        Elements elements = element.getElementsByTag("li");
        List list = new ArrayList();
        for (Element el : elements) {
//            对于图片特多的网站,会实现懒加载,延迟加载
            String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");
            String price = el.getElementsByClass("p-price").eq(0).text();
            String title = el.getElementsByClass("p-name").eq(0).text();
            list.add(new Content(title, img, price));

        }
        return list;
    }
}

别忘了定义实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Content {
    private String title;
    private String img;
    private String price;
}

获取到数据以后,需要通过之前添加文档的方式,添加到 elasticSearch:

//    1、解析数据,放入 es 中
    public Boolean parseContent(String keywords) throws IOException {
        List contentList = new HtmlParseUtil().parseJd(keywords);
//        把查询的数据插入 es 中
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("2m");
        for (int i = 0; i < contentList.size(); i++) {
            bulkRequest.add(new IndexRequest("js_good")
                    .source(JSON.toJSONString(contentList.get(i)), XContentType.JSON));

        }
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        return bulk.hasFailures();
    }

添加完以后,打开 elasticSearch 查看数据库信息:如下表示能够爬取到数据,并且能够添加到数据库

然后就进入正文,结合前端界面,实现数据的搜索

首先整合前端 vue
`

Java-ES仿京东实战
    
    
        
            
                
                

天猫搜索
  • Java
  • 前端
  • Linux
  • 大数据
  • 理财
品牌
  • Java
综合 人气 新品 销量 价格

{{result.price}}

{{result.title}}

店铺: Java

月成交999笔 评价 3

`

后端的代码:
controller 层,有分页信息,还有关键字

 @GetMapping("/search/{keyword}/{pageNo}/{pageSize}")
    public List> search(@PathVariable("keyword") String keywords,
                                            @PathVariable("pageNo")int pageNo,
                                            @PathVariable("pageSize")int pageSize) throws IOException {
        return contentService.searchPage(keywords, pageNo, pageSize);
    }

service 层:

//    获取数据实现搜索
    public List> searchPage(String keyword, int pageNo, int pageSize) throws IOException {
        if (pageNo <= 1) {
            pageNo = 1;
        }
//        条件搜索
        SearchRequest searchRequest = new SearchRequest("js_good");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//        分页
        sourceBuilder.from(pageNo);
        sourceBuilder.size(pageSize);
//        1、精准匹配
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", keyword);
        sourceBuilder.query(termQueryBuilder);
        sourceBuilder.timeout(new Timevalue(60, TimeUnit.SECONDS));
//      执行搜索
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
//        解析结果
        List> list = new ArrayList<>();
        for (SearchHit documentFields : searchResponse.getHits().getHits()) {
            list.add(documentFields.getSourceAsMap());
        }
        return list;
    }

完成代码看结果:
需要注意,搜索的结果必须数据库里存在才行,就是是说,想要搜什么内容,都需要先去爬虫爬取数据,然后再搜索,如下 elasticsearch 里面只有 java 和 vue 的一些数据,所以只能收到这两个

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303610.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号