博客
关于我
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工作笔记017
    查看>>
    python_标识符_帮助系统的使用_命名规则---python工作笔记018
    查看>>
    python_海龟绘图_坐标系问题_画笔各种方法---python工作笔记013
    查看>>
    python_海龟绘图_画出奥运五环图---python工作笔记014
    查看>>
    Python_生产者消费者模型、管道、数据共享、进程池
    查看>>
    python_程序格式_缩进_行注释_段注释---python工作笔记012
    查看>>
    python_程序的构成---python工作笔记015
    查看>>
    python_超文本传输协议
    查看>>
    Python_集合
    查看>>
    Python|AsyncIO|TypeError:应为协程
    查看>>
    python——random模块的应用
    查看>>
    Python——基础知识细节
    查看>>
    Python——正则表达式
    查看>>
    Python—面向对象2
    查看>>
    Python“和“带整数的运算符
    查看>>
    Python“文件存在“制作目录时出错
    查看>>
    Python“文件存在“制作目录时出错
    查看>>
    Python、IMAP 和 GMail.将消息标记为已查看
    查看>>
    python一个一个获取迭代器的元素
    查看>>
    python一维数组 提取_python – 如何从numpy中的1维数组中提取零维切片
    查看>>