ElasticsearchTemplate 批量插入

public void bulkIndex() throws Exception {
        int counter = 0;
        try {
            List queries = new ArrayList();

            String sql = "xxxx";

            List<Model> list = jdbcTemplate.query(sql, (rs, rowNum) -> {
                Model model = new Model
                return model ;
            });


            for (Model item : list) {
                IndexQuery indexQuery = new IndexQuery();
                indexQuery.setId(item.getPaymentReportId().toString());
                indexQuery.setSource(JSON.toJSONString(item));
                indexQuery.setIndexName("new_report_system");
                indexQuery.setType("payment_report");
                queries.add(indexQuery);
                //分批提交索引
                if (counter != 0 && counter % 1000 == 0) {
                    elasticsearchTemplate.bulkIndex(queries);
                    queries.clear();
                    System.out.println("bulkIndex counter : " + counter);
                }
                counter++;
            }
            //不足批的索引最后不要忘记提交
            if (queries.size() > 0) {
                elasticsearchTemplate.bulkIndex(queries);
            }
            elasticsearchTemplate.refresh("new_report_system");
            System.out.println("bulkIndex completed.");
        } catch (Exception e) {
            System.out.println("IndexerService.bulkIndex e;" + e.getMessage());
            throw e;
        }
    }

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用 ElasticsearchTemplate 的 multiGet 方法进行批量查询。 示例代码如下: ```java List<String> ids = Arrays.asList("1", "2", "3"); List<IndexCoordinates> indexCoordinatesList = new ArrayList<>(); indexCoordinatesList.add(IndexCoordinates.of("index1")); indexCoordinatesList.add(IndexCoordinates.of("index2")); MultiGetRequest multiGetRequest = new MultiGetRequest(); for (String id : ids) { for (IndexCoordinates indexCoordinates : indexCoordinatesList) { multiGetRequest.add(indexCoordinates.getIndexName(), indexCoordinates.getIndexName(), id); } } MultiGetResponse multiGetResponse = elasticsearchTemplate.multiGet(multiGetRequest, RequestOptions.DEFAULT); for (MultiGetItemResponse itemResponse : multiGetResponse.getResponses()) { if (!itemResponse.isFailed()) { GetResponse getResponse = itemResponse.getResponse(); if (getResponse.isExists()) { String index = getResponse.getIndex(); String id = getResponse.getId(); String sourceAsString = getResponse.getSourceAsString(); // handle the response } } } ``` 在上面的代码中,我们首先定义了要查询的文档的 ID 列表和索引列表。然后,我们创建了一个 MultiGetRequest 对象,并为每个文档添加了一个 GetRequest。最后,我们使用 ElasticsearchTemplate 的 multiGet 方法执行批量查询,并逐一处理每个查询结果。 需要注意的是,在实际应用中,我们可能需要对查询结果进行一些额外的处理,例如将查询结果转换为我们需要的对象类型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值