springboot2.1.8+elasticsearch7.3.2(三),添加文档,批量添加文档

我的DEMO项目下载:https://gitee.com/zhuhongliang/soringboot_elastic_search_732.git

Service:

/**
 * 添加文档
 * @param obj
 */
public String createDoc(Object obj){
    /**
     * 设置索引,必须是小写,所以使用toLowerCase()方法进行转换
     */
    IndexRequest request = new IndexRequest(obj.getClass().getSimpleName().toLowerCase());
    /**
     * 设置文档id。如果不设置,系统会自动生成
     */
    //request.id("xxxx");
    request.source(JSONObject.toJSONString(obj), XContentType.JSON);
    try {
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);
        log.info(JSONObject.toJSONString(response));
        if(DocWriteResponse.Result.CREATED == response.getResult()){
            return response.getId();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "";
}

/**
 * 批量处理文档
 * @param list 需要处理的文档列表
 */
public void createMultiDoc(List<Object> list){
    BulkRequest request = new BulkRequest();
    /**
     * 遍历
     * IndexRequest不设置id,让系统自己添加
     * DeleteRequest 批量删除
     * UpdateRequest 批量更新
     */
    list.forEach((obj)->{
        request.add(new IndexRequest(obj.getClass().getSimpleName().toLowerCase())
                .source(JSONObject.toJSONString(obj), XContentType.JSON));
    });
    try {
        BulkResponse bulkResponse = client.bulk(request,RequestOptions.DEFAULT);
        log.info(JSONObject.toJSONString(bulkResponse));
        bulkResponse.forEach((BulkItemResponse bulkItemResponse)->{
            DocWriteResponse itemResponse = bulkItemResponse.getResponse();
            switch (bulkItemResponse.getOpType()) {
                case INDEX:
                case CREATE:
                    IndexResponse indexResponse = (IndexResponse) itemResponse;
                    log.info(JSONObject.toJSONString(indexResponse));
                    if(DocWriteResponse.Result.CREATED == indexResponse.getResult()){
                        log.info("添加成功");
                    }
                    break;
                case UPDATE:
                    UpdateResponse updateResponse = (UpdateResponse) itemResponse;
                    break;
                case DELETE:
                    DeleteResponse deleteResponse = (DeleteResponse) itemResponse;
                    break;
                default:break;
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }
}

测试类:

/**
     * 测试添加文档
     */
    @Test
    public void createDoc(){
        Article article = new Article();
        article.setTitle("水调歌头·明月几时有");
        article.setContent("丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。\n" +
                "\n" +
                "明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?(何似 一作:何时;又恐 一作:惟 / 唯恐)\n" +
                "转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。(长向 一作:偏向)");
        article.setCreate_time(new Date());
        String result = commodityServiceImpl.createDoc(article);
        log.info("添加文档返回的id:{}",result);
    }
/**
 * 测试批量添加文档
 */
@Test
public void createMultiDoc(){


    Article article1 = new Article();
    article1.setTitle("声声慢·寻寻觅觅");
    article1.setContent("寻寻觅觅,冷冷清清,凄凄惨惨戚戚。乍暖还寒时候,最难将息。三杯两盏淡酒,怎敌他、晚来风急?雁过也,正伤心,却是旧时相识。\n" +
            "满地黄花堆积,憔悴损,如今有谁堪摘?守着窗儿,独自怎生得黑?梧桐更兼细雨,到黄昏、点点滴滴。这次第,怎一个愁字了得!(守着窗儿 一作:守著窗儿)测试春晚");
    article1.setCreate_time(new Date());

    Article article2 = new Article();
    article2.setTitle("卜算子·咏梅");
    article2.setContent("驿外断桥边,寂寞开无主。已是黄昏独自愁,更著风和雨。(著 同:着) \n" +
            "无意苦争春,一任群芳妒。零落成泥碾作尘,只有香如故。");
    article2.setCreate_time(new Date());

    Article article3 = new Article();
    article3.setTitle("武陵春·春晚");
    article3.setContent("风住尘香花已尽,日晚倦梳头。物是人非事事休,欲语泪先流。\n" +
            "闻说双溪春尚好,也拟泛轻舟。只恐双溪舴艋舟,载不动许多愁。测试寻寻觅觅咏梅.测试咏梅");
    article3.setCreate_time(new Date());

    List<Object> list = new ArrayList<>();
    list.add(article1);
    list.add(article2);
    list.add(article3);

    commodityServiceImpl.createMultiDoc(list);
}

运行测试类的批量添加之后控制台输出:

2019-09-21 00:31:08.468  INFO 230324 --- [           main] c.z.e.service.impl.ServiceImpl           : {"fragment":false,"id":"LTODT20Bk6nS0BLhTTX_","index":"article","primaryTerm":1,"result":"CREATED","seqNo":0,"shardId":{"fragment":true,"id":-1,"index":{"fragment":false,"name":"article","uUID":"_na_"},"indexName":"article"},"shardInfo":{"failed":0,"failures":[],"fragment":false,"successful":1,"total":1},"type":"_doc","version":1}
2019-09-21 00:31:08.468  INFO 230324 --- [           main] c.z.e.service.impl.ServiceImpl           : 添加成功
2019-09-21 00:31:08.469  INFO 230324 --- [           main] c.z.e.service.impl.ServiceImpl           : {"fragment":false,"id":"LjODT20Bk6nS0BLhTTX_","index":"article","primaryTerm":1,"result":"CREATED","seqNo":1,"shardId":{"fragment":true,"id":-1,"index":{"fragment":false,"name":"article","uUID":"_na_"},"indexName":"article"},"shardInfo":{"failed":0,"failures":[],"fragment":false,"successful":1,"total":1},"type":"_doc","version":1}
2019-09-21 00:31:08.469  INFO 230324 --- [           main] c.z.e.service.impl.ServiceImpl           : 添加成功
2019-09-21 00:31:08.469  INFO 230324 --- [           main] c.z.e.service.impl.ServiceImpl           : {"fragment":false,"id":"LzODT20Bk6nS0BLhTTX_","index":"article","primaryTerm":1,"result":"CREATED","seqNo":2,"shardId":{"fragment":true,"id":-1,"index":{"fragment":false,"name":"article","uUID":"_na_"},"indexName":"article"},"shardInfo":{"failed":0,"failures":[],"fragment":false,"successful":1,"total":1},"type":"_doc","version":1}
2019-09-21 00:31:08.469  INFO 230324 --- [           main] c.z.e.service.impl.ServiceImpl           : 添加成功

在kibana中查看mapping,发现实体类Article的create_time也出现了

{
  "mapping": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_max_word"
      },
      "create_time": {
        "type": "long"
      },
      "title": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}

也可以在后台看到新创建的文档数量

在Dev Tools 页面执行GET /article/_search 查看:上面使用批量添加接口添加的文档已经出现了

 

 

 

我的DEMO项目下载:https://gitee.com/zhuhongliang/soringboot_elastic_search_732.git

要发表评论,您必须先登录