package com.winfo.hcsp.util;
import com.winfo.hcsp.domain.topologymng.River;
import com.winfo.hcsp.es.pojo.BasePojo;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
public class EsBeanUtil {
public static List<Field> getBeanFields(Object o){
List<Field> list = new ArrayList<>();
Class clazz = o.getClass();
while (clazz != null){
list.addAll(Arrays.asList(clazz.getDeclaredFields()));
clazz = clazz.getSuperclass();
}
return list;
}
public static List<Map<String ,Object>> getFiledsInfo(Object o){
List<Field> fields=getBeanFields(o);
String[] fieldNames=new String[fields.size()];
List<Map<String ,Object>> list = new ArrayList();
for(int i=0;i<fields.size();i++){
Map<String ,Object> infoMap = new HashMap();
if (fields.get(i).getType().toString().toLowerCase().indexOf("list") == -1){
infoMap.put("type", fields.get(i).getType().toString());
infoMap.put("name", fields.get(i).getName());
infoMap.put("value", getFieldValueByName(fields.get(i).getName(), o));
list.add(infoMap);
}
}
return list;
}
public static void main(String[] args) {
River testBean = new River();
List<Map<String ,Object>> list = getFiledsInfo(testBean);
for (Map<String ,Object> map : list){
System.out.println(map);
}
}
private static Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[] {});
Object value = method.invoke(o, new Object[] {});
return value;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static boolean isBeanEmpty(List<Map<String, Object>> list) {
boolean flag = false;
for (Map<String ,Object> map : list){
if ("id".equals(map.get("name").toString())){
if (!StringUtils.isEmpty(map.get("value"))){
flag = true;
}
}
}
return flag;
}
public static XContentBuilder getInsertxContentBuilder(Object object) throws IOException {
List<Map<String, Object>> list = getFiledsInfo(object);
XContentBuilder mapping = XContentFactory.jsonBuilder().startObject();
for (Map<String, Object> map : list) {
if (!"esIndex".equals(map.get("name").toString()) &&
!"esType".equals(map.get("name").toString())) {
mapping.field(map.get("name").toString(), map.get("value"));
}
}
mapping.endObject();
return mapping;
}
public static XContentBuilder getCreatexContentBuilder(List<Map<String, Object>> list) throws IOException {
XContentBuilder mapping = XContentFactory.jsonBuilder()
.startObject().startObject("properties"); //设置之定义字段;
for (Map<String, Object> map : list) {
switch (map.get("type").toString()) {
case "class java.lang.String": setStringMapping(mapping, map);break;
case "class java.lang.Integer": setStringMapping(mapping,map);break;
case "int": setStringMapping(mapping,map);break;
//后续可以添加属性类型
}
}
mapping.endObject()
.endObject();
return mapping;
}
private static void setStringMapping(XContentBuilder mapping, Map<String, Object> map) throws IOException {
if (map.get("name").toString().toLowerCase().indexOf("time") == -1 &&
!map.get("name").toString().equals("esType") &&
!map.get("name").toString().equals("esIndex")){
mapping.startObject(map.get("name").toString())
.field("type", "text")
.startObject("fields")
.startObject("keyword")
.field("ignore_above", 256)
.field("type", "keyword")
.endObject()
.endObject()
.endObject();
}else if(map.get("name").toString().toLowerCase().indexOf("time") != -1){
mapping.startObject(map.get("name").toString())
.field("type", "date")
.field("format","yyyy-MM-dd HH:mm:ss")
.endObject();
}
}
public static BasePojo getBasePojo(List<Map<String, Object>> list) {
BasePojo basePojo = new BasePojo();
for (Map<String, Object> map : list) {
if (map.get("name").equals("esType")) {
basePojo.setType(map.get("value").toString());
}
if (map.get("name").equals("esIndex")) {
basePojo.setIndex(map.get("value").toString());
}
if (map.get("name").equals("id")) {
basePojo.setId(StringUtils.isEmpty(map.get("value"))?"":map.get("value").toString());
}
}
return basePojo;
}
}
基于transportClient+spring MVC的elasticsearch封装
4星 · 超过85%的资源 需积分: 9 146 浏览量
2018-09-21
18:04:45
上传
评论
收藏 9KB ZIP 举报
nchiufwubgv
- 粉丝: 0
- 资源: 2
最新资源
- 基于python实现的基于PyQt5和爬虫的小说阅读系统.zip
- 机械设计整经机上纱自动化sw20非常好的设计图纸100%好用.zip
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈