一、java对象转mapping对象原则:
1.对于数值类型,越小越好。
2.精确查询,使用keyword
3.模糊查询使用text
4.时间可以用long,方便范围查找。
5.es6.0以上支持数值快速查找。原理就是kd树
二、粗犷的转换代码,能省不少无谓的时间,个别字段评估后修改。
/**
* "productSkuId": {
* "type": "long"
* },
* @param args
*/
public static void main(String[] args) {
try {
Class<?> aClass = ClassLoader.getSystemClassLoader().loadClass(ShopPO.class.getName());//这里是需要转换对象
Field[] fields = aClass.getDeclaredFields();
JSONObject jsonObject = new JSONObject();
for (int i = 0; i < fields.length; i++) {
String name = fields[i].getName();
JSONObject sub = new JSONObject();
String type = fields[i].getType().getTypeName();
if(type.contains("Integer")||type.contains("int")){
sub.put("type","integer");
}else if(type.contains("Long")||type.contains("long")){
sub.put("type","long");
}else if(type.contains("String")){
sub.put("type","keyword");
}else if(type.contains("Boolean")||type.contains("boolean")){
sub.put("type","boolean");
}else if(type.contains("BigDecimal")){
sub.put("type","float");
}else if(type.contains("Date")){
sub.put("type","long");
}else{
sub.put("type","todo");
}
jsonObject.put(name,sub);
}
System.out.println(JSON.toJSONString(jsonObject));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}