SpringBoot使用Jsoup爬取京东数据放入ElasticSearch

SpringBoot 操作 ElasticSearch

开发环境:

  1. Elasticsearch-7.6.2
  2. SpringBoot-2.3.2.RELEASE
  3. Elasticsearch-head-5.0.0

一、ElasticSearch 简介

1、简介

ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多员工能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

ElasticSearch 用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

2、特性

  • 分布式的文档存储引擎
  • 分布式的搜索引擎和分析引擎
  • 分布式,支持PB级数据

3、使用场景

  • 搜索领域: 如百度、谷歌,全文检索等。
  • 门户网站: 访问统计、文章点赞、留言评论等。
  • 广告推广: 记录员工行为数据、消费趋势、员工群体进行定制推广等。
  • 信息采集: 记录应用的埋点数据、访问日志数据等,方便大数据进行分析。

二、SpringBoot 项目引入 ElasticSearch

1、创建 elasticsearch 项目

2、修改依赖配置

<!--web-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!--lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

<!-- Elasticsearch -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

3、修改配置文件

server:
  port: 9001
spring:
  application:
    name: elasticsearch
  data:
    elasticsearch:
      cluster-name: elasticsearch  #查看localhost:9200测试端口的返回值
      cluster-nodes: localhost:9300

9200用于外部通讯,基于http协议,程序与es的通信使用9200端口。

9300jar之间就是通过tcp协议通信,遵循tcp协议,es集群中的节点之间也通过9300端口进行通信。

4、创建 Commodity 商品实体类


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

import java.io.Serializable;

/**
 * @author : CP
 * @version: 1.0
 * @program : elasticsearch
 * @description :
 * @date : 2021-03-17 12:28
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "commoditydb")    //indexName = 不能包含大写
public class Commodity implements Serializable {
   

    /**
     * 商品id
     */
    @Id
    private String skuId;

    /**
     * 商品名称
     */
    private String name;

    /**
     * 商品图片路径
     */
    private String imgUrl;

    /**
     * 商品价格
     */
    private String price;

    /**
     * 商品品牌
     */
    private String brand;

    /**
     * 商品路径
     */
    private String commodityUrl;
}

5、创建 CommodityRepository 类

继承 ElasticsearchRepository 操作类似 Mybatis-plus

package com.cp.dao;

import com.cp.enitiy.Commodity;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

/**
 * @author : CP
 * @version: 1.0
 * @program : elasticsearch
 * @description :
 * @date : 2021-03-17 12:38
 **/
@Repository
public interface CommodityRepository extends ElasticsearchRepository<Commodity, String> {
   
}

6、定义service层

package com.cp.service;

import com.cp.enitiy.Commodity;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * @author : CP
 * @version: 1.0
 * @program : elasticsearch
 * @description :
 * @date : 2021-03-17 13:33
 **/
public interface CommodityService {
   

    /**
     * 获取总记录数
     * @return long
     */
    long count();

    /**
     * 新增
     * @param commodity 商品类
     * @return Commodity
     */
    Commodity save(Commodity commodity);

    /**
     * 删除指定内容
     * @param commodity
     */
    void delete(Commodity commodity);

    /**
     * 获取所有
     * @return Iterable 迭代器
     */
    Iterable<Commodity> getAll();

    /**
     * 根据名称模糊获取所有内容
     * @param name 查询条件
     * @return List<Commodity>
     */
    List<Commodity> getByName(String name);

    /**
     * 查询并分页
     * @param pageNo 当前页码
     * @param pageSize 显示行数
     * @param kw 查询条件
     * @return Page<Commodity>
     */
    Page<Commodity> pageQuery(Integer pageNo, Integer pageSize, String kw);

}

package com.cp.service.impl;

import com.cp.dao.CommodityRepository;
import com.cp.enitiy.Commodity;
import com.cp.service.CommodityService;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author : CP
 * @version: 1.0
 * @program : elasticsearch
 * @description :
 * @date : 2021-03-17 13:34
 **/
@Service
public class CommodityServiceImpl implements CommodityService {
   

    @Autowired
    private CommodityRepository commodityRepository;

    @Override
    public long count() {
   
        return commodityRepository.count();
    }

    @Override
    public Commodity save(Commodity commodity) {
   
        return commodityRepository.save(commodity);
    }

    @Override
    public void delete(Commodity commodity) {
   
        commodityRepository.delete(commodity);
    }

    @Override
    public Iterable<Commodity> getAll() {
   
        return commodityRepository.findAll();
    }

    @Override
    public List<Commodity> getByName(String name) {
   
        //商品集合
        List<Commodity> list = new ArrayList<>();
        //定义查询条件
        MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("name", name);
        //根据条件进行搜索
        Iterable<Commodity> search = commodityRepository.search(matchQueryBuilder);
        //迭代储存数据
        search.forEach(i->list.add(i));
        return list;
    }

    @Override
    public Page<Commodity> pageQuery(Integer pageNo, Integer pageSize, String kw) {
   
        NativeSearchQuery serchQuery = new NativeSearchQueryBuilder()
                //定义查询方式
                .withQuery(QueryBuilders.matchPhraseQuery("name", kw))
                //进行分页
                .withPageable(PageRequest.of(pageNo, pageSize
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值