为什么批量插入存入到es中,字段类型都变成了text类型

本文介绍了一种批量处理JSON数据的方法,包括格式化日期字段、转换CLOB类型字段,并将处理后的数据批量索引到Elasticsearch中。通过使用Java和Elasticsearch客户端API实现了这一过程。

List<IndexRequest> requests = new ArrayList<>();
//        int i=0;
        for(Map<String,Object> map:list){
//            i++;
            if(map.containsKey("BIRTHDAY")){
                String birth=map.get("BIRTHDAY").toString();
                birth= DateUtils.formatDate(birth);
                map.put("BIRTHDAY", birth);
            }
            for(String key:map.keySet()){
                if("CLOB".equals(mapType.get(key))){
                    map.put(key, String.valueOf(map.get(key)));
                }else{
                    map.put(key, map.get(key));
                }
                
            }
            JSONObject json =new JSONObject(map);
            System.out.println(json);
            IndexRequest indexRequest=new IndexRequest(index,type);//,String.valueOf(i)
            indexRequest.source(json);
            requests.add(indexRequest);
        }
        BulkRequest bulkRequest=new BulkRequest();
        for(IndexRequest request:requests){
            bulkRequest.add(request);
        }

在Java中存入多张图片到数据库时,适合使用的数据字段类型数据类型如下: ### 数据字段类型 - **BLOB(Binary Large Object)**:BLOB是一种二进制数据类型,通常用于存储大型二进制对象,适合存储图片等二进制数据。在Java中,可以使用`java.sql.Blob`类型来处理这种数据。例如,在MySQL中,有不同大小的BLOB类型,如`TINYBLOB`(最大长度255字节)、`BLOB`(最大长度65,535字节)、`MEDIUMBLOB`(最大长度16,777,215字节)和`LONGBLOB`(最大长度4,294,967,295字节),可以根据图片的大小选择合适的类型 [^1]。 - **VARBINARY**:VARBINARY是一种可变长度的二进制数据类型,同样可以用于存储图片等二进制数据。与BLOB不同的是,VARBINARY有一个最大长度限制,需要在定义字段时指定。例如,`VARBINARY(2048)`表示最大长度为2048字节的可变二进制数据。 ### 数据类型 - **MySQL**:MySQL是一种广泛使用的开源关系型数据库,支持BLOB和VARBINARY等二进制数据类型。可以根据图片的大小选择合适的BLOB类型,如上述提到的`TINYBLOB`、`BLOB`、`MEDIUMBLOB`和`LONGBLOB`。 - **Oracle**:Oracle数据库提供了`BLOB`数据类型用于存储大型二进制对象。在Oracle中,`BLOB`类型可以存储最大4GB的二进制数据。 - **SQL Server**:SQL Server支持`VARBINARY(MAX)`和`IMAGE`(在SQL Server 2005及以后版本中已被弃用,推荐使用`VARBINARY(MAX)`)类型来存储二进制数据。`VARBINARY(MAX)`可以存储最大2^31 - 1字节的二进制数据。 以下是一个简单的Java代码示例,演示如何将图片以BLOB类型存储到MySQL数据库中: ```java import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class ImageToDatabase { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/your_database"; String username = "your_username"; String password = "your_password"; try (Connection conn = DriverManager.getConnection(url, username, password)) { File imageFile = new File("path/to/your/image.jpg"); InputStream inputStream = new FileInputStream(imageFile); String sql = "INSERT INTO images (image_data) VALUES (?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setBlob(1, inputStream); pstmt.executeUpdate(); } } catch (Exception e) { e.printStackTrace(); } } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值