博客
关于我
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:修改 PATH 环境变量的平台无关方式
    查看>>
    Python:假与 0
    查看>>
    Python:函数使用
    查看>>
    Python:函数进阶
    查看>>
    Python:在整数的二进制表示中查找最长的二进制间隙
    查看>>
    Python:如何从二进制转换为 base 64 并返回?
    查看>>
    Python:如何以非阻塞方式读取子进程的标准输出
    查看>>
    Python:如何使用 plotly 制作阴影区域或交替背景颜色?
    查看>>
    Python:如何根据日期时间获取值的计数
    查看>>
    python:如何检测串行 COM 上的设备名称/ID
    查看>>
    Python:如何模拟 datetime.utcnow()?
    查看>>
    Python:如果DataFrames之间的其他值匹配,则对DataFrame中的值求和
    查看>>
    Python:字典思维
    查看>>
    Python:将 HEX 字符串转换为字节
    查看>>
    Python:将列表与范围列表合并
    查看>>
    Python:将列表列表初始化为一定大小,
    查看>>
    Python:带有生成器的给定集合的幂集
    查看>>
    Python:按字符的位置拆分字符串
    查看>>
    Python:替换嵌套字典中的值
    查看>>
    Python:爬取数据出现response.status_code为403解决方法
    查看>>