【Elasticsearch】04-RestAPI

1. 引入依赖

java 复制代码
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

2. 覆盖SpringBoot中的版本

需要在父工程里面进行修改,防止版本覆盖。

java 复制代码
  <properties>
      <maven.compiler.source>11</maven.compiler.source>
      <maven.compiler.target>11</maven.compiler.target>
      <elasticsearch.version>7.12.1</elasticsearch.version>
  </properties>

3. 初始化RestHighLevelClient

java 复制代码
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
        HttpHost.create("http://192.168.150.101:9200")
));

4. 创建索引

java 复制代码
    @Test
    void testCreate() {
        // 1. 准备 Request对象
        CreateIndexRequest request = new CreateIndexRequest("items");

        // 2. 准备请求参数
        request.source(MAPPING_TEMPLATE, XContentType.JSON);

        // 3. 发送请求
        try {
            restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

5. Mapping操作

java 复制代码
    @Test
    void testCreate() {
        // 1. 准备 Request对象
        CreateIndexRequest request = new CreateIndexRequest("items");

        // 2. 准备请求参数
        request.source(MAPPING_TEMPLATE, XContentType.JSON);

        // 3. 发送请求
        try {
            restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    void testGet() {
        GetIndexRequest request = new GetIndexRequest("items");
        try {
            // GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);
            boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
            System.out.println(exists);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    void testDelete() {
        DeleteIndexRequest request = new DeleteIndexRequest("items");
        try {
            restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

6. 文档操作

java 复制代码
@SpringBootTest(properties = "spring.profiles.active=local")
public class ElasticDocumentTest {
    private RestHighLevelClient client;

    @Resource
    private IItemService itemService;

    @BeforeEach
    public void init() {
        client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://nuaamvp.cn:9200")
        ));
    }

    @AfterEach
    void tearDown() {
        if (client!=null) {
            try {
                client.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

    @Test
    void testIndexDoc() {
        Item item = itemService.getById(317578L);
        ItemDoc itemDoc = BeanUtil.copyProperties(item, ItemDoc.class);
        // 1. 创建对象
        IndexRequest request = new IndexRequest("items").id(itemDoc.getId());

        // 2. 准备请求参数
        request.source(JSONUtil.toJsonStr(itemDoc), XContentType.JSON);
        try {
            // 3. 发送请求
            client.index(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    void testGetDoc() throws IOException {
        // 1. 准备请求对象
        GetRequest request = new GetRequest("items", "317578");
        // 2. 发送请求
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        // 3. 获取响应结果
        String json = response.getSourceAsString();

        ItemDoc itemDoc = JSONUtil.toBean(json, ItemDoc.class);
        System.out.println(itemDoc);
    }

    @Test
    void testDeleteDoc() throws IOException {
        DeleteRequest request = new DeleteRequest("items", "317578");
        client.delete(request, RequestOptions.DEFAULT);
    }

    @Test
    void testUpdateDoc() throws IOException {
        UpdateRequest request = new UpdateRequest("items", "317578");
        request.doc(
                "price", 198,
                "commentCount", 128
        );
        client.update(request, RequestOptions.DEFAULT);
    }
}

7.数据批量导入

java 复制代码
    @Test
    void testLoadItemDocs() throws IOException {
        // 分页查询商品数据
        int pageNo = 1;
        int size = 1000;
        while (true) {
            Page<Item> page = itemService.lambdaQuery().eq(Item::getStatus, 1).page(new Page<Item>(pageNo, size));
            // 非空检验
            List<Item> items = page.getRecords();
            if (CollUtils.isEmpty(items)) {
                return ;
            }
            log.info("加载第{}页数据,共{}条",pageNo, items.size());
            // 1. 创建请求对象
            BulkRequest request = new BulkRequest("items");
            for(Item item:items) {
                // 2.1 itemDoc
                ItemDoc itemDoc = BeanUtil.copyProperties(item, ItemDoc.class);
                request.add(new IndexRequest()
                        .id(itemDoc.getId())
                        .source(JSONUtil.toJsonStr(itemDoc), XContentType.JSON));
            }
            // 3. 发送请求
            client.bulk(request, RequestOptions.DEFAULT);
            // 翻页
            pageNo ++;
        }
    }
相关推荐
激进的猴哥16 分钟前
Linux Elasticsearch kibana ik分词器 安装部署和快照恢复
linux·elasticsearch·jenkins
踏歌的Java Daily16 分钟前
Windows安装ES单机版设置密码
大数据·windows·elasticsearch
抓哇小菜鸡21 分钟前
Elasticsearch(四)
大数据·elasticsearch·搜索引擎
DolphinScheduler社区1 小时前
DolphinScheduler自身容错导致的服务器持续崩溃重大问题的排查与解决
大数据
Y1nhl2 小时前
搜广推校招面经四
pytorch·python·搜索引擎·推荐算法
锋火连天2 小时前
Flink提交任务通过Kerberos认证
大数据·flink
PersistJiao10 小时前
实时数仓: Hudi 表管理、Flink 性能调优或治理工具脚本
大数据·flink
Loving_enjoy11 小时前
ChatGPT 数据分析与处理使用详解
大数据·人工智能
xchenhao12 小时前
Linux 环境(Ubuntu)部署 Hadoop 环境
大数据·linux·hadoop·ubuntu·hdfs·环境·dfs
正在走向自律12 小时前
解锁Agent的数据分析潜能,开启智能决策新时代(19/30)
大数据·数据挖掘·数据分析