博客
关于我
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/

    你可能感兴趣的文章
    Node-RED中使用json节点解析JSON数据
    查看>>
    Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
    查看>>
    Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
    查看>>
    Node-RED中实现HTML表单提交和获取提交的内容
    查看>>
    Node.js 函数是什么样的?
    查看>>
    Node.js 实现类似于.php,.jsp的服务器页面技术,自动路由
    查看>>
    node.js 怎么新建一个站点端口
    查看>>
    Node.js 文件系统的各种用法和常见场景
    查看>>
    node.js 配置首页打开页面
    查看>>
    node.js+react写的一个登录注册 demo测试
    查看>>
    Node.js中环境变量process.env详解
    查看>>
    Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
    查看>>
    Node.js的循环与异步问题
    查看>>
    Nodejs express 获取url参数,post参数的三种方式
    查看>>
    nodejs libararies
    查看>>
    nodejs npm常用命令
    查看>>
    nodejs 运行CMD命令
    查看>>
    nodejs-mime类型
    查看>>
    nodejs中Express 路由统一设置缓存的小技巧
    查看>>
    NodeJs单元测试之 API性能测试
    查看>>