自学内容网 自学内容网

【Elasticsearch】04-RestAPI

1. 引入依赖

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

2. 覆盖SpringBoot中的版本

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

  <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

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
        HttpHost.create("http://192.168.150.101:9200")
));

4. 创建索引

    @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操作

    @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. 文档操作

@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.数据批量导入

    @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 ++;
        }
    }

原文地址:https://blog.csdn.net/qq_45722630/article/details/144180447

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!