博客
关于我
ElasticSearch的综合实战
阅读量:612 次
发布时间:2019-03-13

本文共 2326 字,大约阅读时间需要 7 分钟。

ElasticSearch 综合实战指南

一、爬虫实现

京东搜索结果的抓取是整个项目的基础,决定了后续的数据处理流程。以下是主要实现步骤:

  • URL构造:根据关键词构造搜索URL,访问京东搜索页面。
  • HTML解析:使用Jsoup解析HTML,提取商品列表。
  • 数据提取:
    • 图片获取:注意到京东使用了懒加载技术,图片 URL 存在于 data-lazy-img 属性。
    • 价格和标题:分别从 p-price 和 p-name 类中提取。
  • 数据存储:将提取到的数据存储到本地文件或数据库,以备后续处理。
  • 2. 数据存储到Elasticsearch

    • 服务层:创建 ContentService,注入Elasticsearch客户端。

      @Servicepublic class ContentService {    private RestHighLevelClient client;    @Autowired    @Qualifier("restHighLevelClient")    public void setClient(RestHighLevelClient client) {        this.client = client;    }    public boolean parseContent(String keyword) throws IOException {        List
      contents = new HtmlParseUtil().parseJD(keyword); BulkRequest request = new BulkRequest(); request.timeout("2m"); for (int i = 0; i < contents.size(); i++) { IndexRequest indexRequest = new IndexRequest("jd_goods") .source(JSON.toJSONString(contents.get(i)), XContentType.JSON); request.add(indexRequest); } BulkResponse bulk = client.bulk(request, RequestOptions.DEFAULT); return !bulk.hasFailures(); }}
    • Controller层:提供RESTful API接口,接受关键词并调用解析服务。

      @RestControllerpublic class ContentController {    private ContentService contentService;    @Autowired    public ContentController(ContentService contentService) {        this.contentService = contentService;    }    @GetMapping("/parse/{keyword}")    public Boolean parse(@PathVariable("keyword") String keyword) throws IOException {        return contentService.parseContent(keyword);    }}

    3. 前后端分离

    • 前端:使用Vue.js实现数据展示和交互。
    • 后端:实现RESTful API,支持分页搜索。
      @GetMapping("/search/{keyword}/{pageNo}/{pageSize}")public List
      > search( @PathVariable("keyword") String keyword, @PathVariable("pageNo") int pageNo, @PathVariable("pageSize") int pageSize) throws IOException { return contentService.searchPage(keyword, pageNo, pageSize); }

    4. 搜索高亮

    为了提升用户体验,增加搜索结果的高亮显示:

    • 修改服务类的搜索方法,添加高亮功能:
      HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field("title");highlightBuilder.preTags("");highlightBuilder.postTags("");
    • 调用高亮建造器,并返回修改后的数据。

    访问说明

    • 本地测试:访问 http://localhost:9090/search/java/1/20,验证搜索和高亮功能。
    • 部署应用:将项目部署到服务器,确保高并发下Elasticsearch性能稳定。

    总结

    通过本次实战,掌握了从数据抓取到存储、索引、查询优化等一整套Elasticsearch技能。同时,前后端分离的实现搭建了一个完整的应用架构,为后续项目开发奠定了坚实基础。

    转载地址:http://bzkaz.baihongyu.com/

    你可能感兴趣的文章
    python一个一个获取迭代器的元素
    查看>>
    python一维数组 提取_python – 如何从numpy中的1维数组中提取零维切片
    查看>>
    python三大库之--numpy(一)
    查看>>
    python三大库之--numpy(二)
    查看>>
    python上的字无效字符_标识中的无效字符
    查看>>
    python下用decode和encode 中文转码
    查看>>
    Python下调用Linux的Shell命令
    查看>>
    Python接口自动化测试实战系列
    查看>>
    python下载_安装_配置_以及第一行python程序---python工作笔记009
    查看>>
    Python不协调机器人消息.内容
    查看>>
    Python与C#之间内存共享互传信息
    查看>>
    python与c语言混合编程_你试过C语言和Python一起混合编程吗?两者相加不是已经无敌了!...
    查看>>
    python与excel
    查看>>
    Python与Excel的完美邂逅:深入浅出,手把手教你轻松玩转Excel数据操作
    查看>>
    python与flask_Python编程中flask的简介与简单使用
    查看>>
    python与图灵机器人交互(WXPY版本)
    查看>>
    python与运算符_python运算符
    查看>>
    python两个列表获取交集,并集,差集
    查看>>
    python两个字典合并,两个list合并
    查看>>
    Python两个版本共存时,命令行升级pip
    查看>>