前言
前段时间遇到ES 中数据类型的一个坑,ElasticsearchRepository<T,ID>中的ID不支持BigInteger 类型, 说一下入坑的过程。
正文
使用BigInteger 报错 |
1、定义Entity
@Data
@Builder
@Document(indexName = "paper", type = "index", shards = 5, replicas = 1, refreshInterval = "-1")
public class PaperIndex {
@Id
private BigInteger id;
/**
* 标题
*/
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String title;
/**
* 摘要
*/
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String summary;
2、 定义Repository
@Component
public interface PaperIndexRepository extends ElasticsearchRepository<PaperIndex, BigInteger> {
}
3、启动程序的错误日志
# 参数异常:不支持BigInteger 类型
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Unsupported ID type class java.math.BigInteger
查看源码 |
实现类:
AbstractElasticsearchRepository中关于ID 有一个抽象方法:
关于stringIdRepresentation() 的实现有三个:
NumberKeyedRepository:
SimpleElasticsearchRepository:
UUIDElasticsearchRepository:
按照我的理解,id的类型可以是:String,UUID,Number (int,long,float,double,byte,short及其包装类型); 所以BigInteger 就不合适咯~
试了下BigDecimal类型,也是不支持滴~!
总结
对ES 的使用不熟悉,导致一个坑接着一个坑的,后续博客将会持续介绍ES 的学习和使用,欢迎大家前来交流~