es java 创建索引_Elasticsearch通过JAVA创建索引、Mapping以及数据的增删该查操作

本文档介绍了如何使用Java操作Elasticsearch 2.4.6版本进行索引创建、Mapping设置以及数据的增删改查操作。内容包括引入Maven依赖、枚举工具类、ElasticSearch工具类的详细代码,以及ElasticSearch操作接口和其实现类的实现。由于项目中使用的JDK为1.7,故示例代码适用于JDK1.7。需要注意的是,Elasticsearch 5.x版本需要JDK1.8,因此这些代码可能不适用于更高版本。
摘要由CSDN通过智能技术生成

因为目前项目中用的JDK是1.7版本的,而ElasticSearch5.x版本需要使用JDK1.8版本,所以以下的代码都是基于ElasticSearch 2.4.6版本的,以下的代码是从项目中提取出来的,所以有些跟业务相关的代码就不贴出来了,仅供自己只好参考使用,所以直接看以下代码,可能很多代码是看不懂的。

引入Maven

org.elasticsearch

elasticsearch

2.4.6

枚举工具类

package com.linewell.ccip.utils.es;

import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

/**

* 枚举工具类

*/

public class EnumUtils {

// 枚举字符串转枚举类型的转换方法

private static String FROM_STRING = "fromString";

/**

* 供

* 解析通用查询参数(分页参数、排序参数)

* DataGridUtils.parseQueryInfo方法调用

*

* 根据类、字段名称、字段值(枚举字符),若字段为枚举,返回枚举值,否则直接返回字段值

* @param entityCls 类,如com.linewell.ccip.servicesbase.bean.log.OrgLog.class

* @param fieldName 字段名称,如com.linewell.ccip.servicesbase.bean.log.type.OperType

* @param fieldVal 字段(枚举字符串),如INSERT

* @return 若字段为枚举,返回枚举值,否则直接返回字段值

*/

public static Object getValByField(Class> entityCls, String fieldName, Object fieldVal) {

Object obj = null;

try {

// 字段类型

Class> fieldCls = getFieldType(entityCls, fieldName);

// 字段类型是否为枚举类型

boolean isEnumCls = fieldCls.isEnum();

// 是枚举类

if (isEnumCls) {

obj = getEnum(fieldCls, (String)fieldVal);

} else {

obj = fieldVal;

}

} catch (SecurityException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

return obj;

}

/**

* 根据枚举字符串获取枚举值

* @param fieldCls枚举类

* @param fieldVal枚举字符串

* @return枚举值

* @throws IllegalAccessException

* @throws InvocationTargetException

*/

private static Enum> getEnum(Class> fieldCls, String fieldVal)

throws IllegalAccessException, InvocationTargetException {

Enum> enumCls = null;

// 全部的方法

Method[] methods = fieldCls.getMethods();

// 方法不为空

if (null != methods && 0 < methods.length) {

// 方法名称

String metName = null;

// 遍历全部方法

for (Method method : methods) {

metName = method.getName();

// 枚举类的字符串转枚举的方法

if (FROM_STRING.equalsIgnoreCase(metName)) {

enumCls = (Enum>) method.invoke(fieldCls, fieldVal);

break;

}

}

}

return enumCls;

}

/**

* 根据类、属性名获取其属性类型

* @param cls

* @param findFieldName

* @return

*/

private static Class> getFieldType(Class> cls, String findFieldName) {

// 字段类型

Class> fieldCls = null;

try {

// 获取该类自身所声明的属性,没有获取父类声明的属性

List fields = getFields(cls);

// 属性不为空

if (null != fields) {

// 是否找到属性

boolean isFind = false;

// 属性名

String fieldName = "";

// 变量属性数组

for (Field field : fields) {

fieldName = field.getName();

// 类自身找到属性获取其属性类型

if (findFieldName.equalsIgnoreCase(fieldName)) {

isFind = true;

fieldCls = field.getType();

break;

}

}

// 类自身没有找到属性获取其属性类型,查找其父类声明的属性

if (false == isFind) {

Field supField = cls.getSuperclass().getDeclaredField(findFieldName);

fieldCls = supField.getType();

}

}

} catch (SecurityException e) {

e.printStackTrace();

} catch (NoSuchFieldException e) {

e.printStackTrace();

}

return fieldCls;

}

private static List getFields(Class> objClass) {

Field[] fields = objClass.getDeclaredFields();

List fieldList = new ArrayList<>();

fieldList.addAll(Arrays.asList(fields));

while (null != objClass) {

fieldList.addAll(Arrays.asList(objClass.getDeclaredFields()));

objClass = objClass.getSuperclass();

}

return fieldList;

}

}

ElasticSearch工具类

package com.linewell.ccip.utils.es;

import com.google.common.collect.Lists;

import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;

import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsR

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值