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

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

ElasticSearch 综合实战指南

一、爬虫实现

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

  • URL构造:根据关键词构造搜索URL,访问京东搜索页面。
  • HTML解析:使用Jsoup解析HTML,提取商品列表。
  • 数据提取
    • 图片获取:注意到京东使用了懒加载技术,图片 URL 存在于 data-lazy-img 属性。
    • 价格和标题:分别从 p-pricep-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/

    你可能感兴趣的文章
    php 删除包含某一字符的数组元素
    查看>>
    Redis学习总结(19)——Redis 5种集群方式对比
    查看>>
    php 反射
    查看>>
    php 处理 大并发
    查看>>
    php 大文件上传
    查看>>
    php 子进程监听消息,swoole学习笔记之多线程端口监听问题记录 多进程epoll模式...
    查看>>
    PHP 学习笔记 (四)
    查看>>
    Redis入门概述
    查看>>
    php 实现Iterator 接口
    查看>>
    PHP 实现N阶矩阵相乘
    查看>>
    php 实现进制转换(二进制、八进制、十六进制)互相转换
    查看>>
    PHP 实现页面跳转的三种方式及详细解析
    查看>>
    php 将XML对象转化为数组
    查看>>
    PHP 工具
    查看>>
    php 常用方法
    查看>>
    PHP 并发扣款,保证数据一致性(悲观锁和乐观锁)
    查看>>
    php 延迟静态绑定static关键字
    查看>>
    php 引用 -
    查看>>
    Redis入门
    查看>>
    PHP 截取字符串乱码的解决方案
    查看>>