IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> elasticSearch核心概念的介绍(十一):JAVA整合ES -> 正文阅读

[大数据]elasticSearch核心概念的介绍(十一):JAVA整合ES

ES整合JAVA实现

前面我们对ES基本概念和API的基本使用进行大致的说明,有兴趣的朋友可以参考一下专栏

ES专栏

这一章我们使用java来整合es查询

1.数据处理

我们对nba中国官网的数据进行爬取并处理成表。

在这里插入图片描述
并通过逆向工程生成基本的service、mapper等文件。

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("nba_player")
public class NbaPlayer implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @TableField("countryEn")
    private String countryEn;

    @TableField("teamName")
    private String teamName;

    @TableField("birthDay")
    private Long birthDay;

    private String country;

    @TableField("teamCityEn")
    private String teamCityEn;

    private String code;

    @TableField("displayAffiliation")
    private String displayAffiliation;

    @TableField("displayName")
    private String displayName;

    @TableField("schoolType")
    private String schoolType;

    @TableField("teamConference")
    private String teamConference;

    @TableField("teamConferenceEn")
    private String teamConferenceEn;

    private String weight;

    @TableField("teamCity")
    private String teamCity;

    @TableField("playYear")
    private Integer playYear;

    @TableField("jerseyNo")
    private String jerseyNo;

    @TableField("teamNameEn")
    private String teamNameEn;

    private Integer draft;

    @TableField("displayNameEn")
    private String displayNameEn;

    @TableField("birthDayStr")
    private String birthDayStr;

    @TableField("heightValue")
    private BigDecimal heightValue;

    private String position;

    private Integer age;

    @TableField("playerId")
    private String playerId;

}

2.添加依赖

这里依赖的版本最好是与你安装的es版本相同

 <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.4.2</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.4.2</version>
 </dependency>

3.测试ES功能

3.1导入一条数据并获取

 /**
     * 测试添加文档
     * @throws IOException
     */
    @Test
    public void addPlayer() throws IOException {
        NbaPlayer player = new NbaPlayer();
        player.setId(999);
        player.setDisplayName("迪丽热巴");
        nbaPlayerService.addPlayer(player,"999");
    }
 /**
     * 获取一个文档
     * @throws IOException
     */
    @Test
    public void getPlayer() throws IOException {
        final Map<String, Object> player = nbaPlayerService.getPlayer("999");
        System.out.println(player);
    }

在这里插入图片描述

3.2修改数据

/**
     * 更新文档
     * @throws IOException
     */
    @Test
    public void updatePlayer() throws IOException {
        //首先获取文档
        final Map<String, Object> player = nbaPlayerService.getPlayer("999");
        System.out.println(player);
        final NbaPlayer nbaPlayers = JSONObject.parseObject(JSON.toJSONString(player),NbaPlayer.class);
        nbaPlayers.setAge(18);
        nbaPlayerService.updatePlayer(nbaPlayers,"999");
        //再次获取
        final Map<String, Object> newPlayer = nbaPlayerService.getPlayer("999");;
        System.out.println(newPlayer);
    }

在这里插入图片描述

3.3删除数据

/**
     * 删除文档通过id
     * @throws IOException
     */
    @Test
    public void deletePlayer() throws IOException {
        nbaPlayerService.deletePlayer("999");
    }

3.4删除全部文档

 /**
     * 删除全部文档
     * @throws IOException
     */
    @Test
    public void deleteAllPlayer() throws IOException {
        nbaPlayerService.deleteAllPlayer();
    }

3.5导入全部文档

 /**
     * 导入全部球员
     * @throws IOException
     */
    @Test
    public void importAllPlayer() throws IOException {
        nbaPlayerService.importAllPlayer();
    }

业务逻辑

接口

public interface INbaPlayerService extends IService<NbaPlayer> {


    /**
     * 新增一个球员
     *
     * @param player
     * @param id
     * @return
     */
    boolean addPlayer(NbaPlayer player, String id) throws IOException;


    /**
     * 获取一个球员
     *
     * @return
     */
    Map<String, Object> getPlayer(String id) throws IOException;

    /**
     * 修改球员
     *
     * @param nbaPlayer
     * @param id
     * @return
     */
    boolean updatePlayer(NbaPlayer nbaPlayer, String id) throws IOException;

    /**
     * 删除球员
     * @param id
     * @return
     */
    boolean deletePlayer(String id) throws IOException;

    /**
     * 删除全部球员
     * @return
     */
    boolean deleteAllPlayer() throws IOException;

    /**
     * 导入全部数据
     * @return
     */
    boolean importAllPlayer() throws IOException;

    /**
     * 通过姓名查找球员
     * @return
     */
    List<NbaPlayer> searchMatch(String key,String value) throws IOException;

    /**
     * 关键字查询
     */
    List<NbaPlayer> searchTerm(String key, String value) throws IOException;
}

实现逻辑

@Service
@RequiredArgsConstructor
public class NbaPlayerServiceImpl extends ServiceImpl<NbaPlayerMapper, NbaPlayer> implements INbaPlayerService {

    private final RestHighLevelClient restHighLevelClient;

    private final static String NBA_INDEX = "nba_latest";


    /**
     * 新增一个球员
     * @param player
     * @param id
     * @return
     */
    @Override
    public boolean addPlayer(NbaPlayer player, String id) throws IOException {
        IndexRequest request = new IndexRequest(NBA_INDEX).id(id).source(beanToMap(player));

        final IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);

        System.out.println(JSONObject.toJSON(response));

        return false;
    }

    /**
     * 获取一个球员
     * @return
     */
    @Override
    public Map<String, Object> getPlayer(String id) throws IOException {
        GetRequest request = new GetRequest(NBA_INDEX,id);
        final GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
        return response.getSource();
    }

    /**
     * 修改球员
     * @param nbaPlayer
     * @param id
     * @return
     */
    @Override
    public boolean updatePlayer(NbaPlayer nbaPlayer, String id) throws IOException {
        UpdateRequest request = new UpdateRequest(NBA_INDEX,id).doc(beanToMap(nbaPlayer));

        final UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
        System.out.println(JSONObject.toJSON(response));
        return false;
    }

    /**
     * 删除球员
     * @param id
     * @return
     */
    @Override
    public boolean deletePlayer(String id) throws IOException {
        DeleteRequest request = new DeleteRequest(NBA_INDEX,id);
        final DeleteResponse delete = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        return false;
    }

    /**
     * 删除全部
     * @return
     * @throws IOException
     */
    @Override
    public boolean deleteAllPlayer() throws IOException {
        DeleteByQueryRequest request = new DeleteByQueryRequest(NBA_INDEX);
        final BulkByScrollResponse response = restHighLevelClient.deleteByQuery(request, RequestOptions.DEFAULT);
        return false;
    }

    /**
     * 导入全部球员
     * @return
     * @throws IOException
     */
    @Override
    public boolean importAllPlayer() throws IOException {
        for (NbaPlayer player : list()) {
            addPlayer(player,String.valueOf(player.getId()));
        }

        return false;
    }

    /**
     * 通过全文检索查询
     * @param key
     * @param value
     * @return
     * @throws IOException
     */
    @Override
    public List<NbaPlayer> searchMatch(String key,String value) throws IOException {
        SearchRequest request = new SearchRequest(NBA_INDEX);
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.query(QueryBuilders.matchQuery(key,value));
        builder.from(0);
        builder.size(100);
        request.source(builder);

        final SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        List<NbaPlayer> playerList = new LinkedList<>();
        for (SearchHit hit : search.getHits().getHits()) {
           playerList.add(JSONObject.parseObject(hit.getSourceAsString(),NbaPlayer.class));
        }
        return playerList;
    }

    /**
     * 关键字查询
     * @param key
     * @param value
     * @return
     */
    @Override
    public List<NbaPlayer> searchTerm(String key,String value) throws IOException {
        SearchRequest searchRequest = new SearchRequest(NBA_INDEX);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.termQuery(key,value));
        searchSourceBuilder.from(0);
        searchSourceBuilder.size(100);
        searchRequest.source(searchSourceBuilder);
        SearchResponse response = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);
        System.err.println(JSONObject.toJSON(response));
        final SearchHit[] hits = response.getHits().getHits();
        List<NbaPlayer> list = new LinkedList<>();
        for (SearchHit hit : hits) {
            NbaPlayer player = JSONObject.parseObject(hit.getSourceAsString(),NbaPlayer.class);
            list.add(player);
        }
        return list;
    }

    Map beanToMap(NbaPlayer player){
        return JSON.parseObject(JSON.toJSONString(player),Map.class);
    }
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:39:43  更:2022-03-04 15:40:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:29:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码