由于业务上的需求 ,最近在研究elasticsearch的相关知识 ,在网上查略了大部分资料 ,基本上对elasticsearch的数据增删改都没有太大问题 ,这里就不做总结了  。但是,在网上始终没找到合适的Java语言自动创建索引映射mapping的文章 , 经过自己的研究测试 ,这里做个简单总结 ,方便自己以后查略 。

首先声明 ,本代码只对elasticsearch5.6.4版本做了测试 ,其他版本,未测 ,根据以往经验 ,至少5.x版本应该是没有问题的 ,好了直接上代码 。

package ec.bigdata.analys.eap.util;  

import ec.bigdata.analys.eap.model.FieldInfo;
import org.apache.log4j.Logger;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient; import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List; /**
* @author Created by KSpring on 2017/2/1.
*/
public class ElasticSearchHandler { public static final String fieldType = "type";
private String clusterName;
private String ip;
private int port; public ElasticSearchHandler() {
} public void setField(String clusterName, String ip, int port) {
this.clusterName = clusterName;
this.ip = ip;
this.port = port;
} private static final Logger logger = Logger.getLogger(ElasticSearchHandler.class); /**
* 取得实例
* @return
*/
public synchronized TransportClient getTransportClient() {
TransportClient client = null ;
try {
Settings settings = Settings.builder().put("cluster.name", clusterName)
/* .put("client.transport.sniff", true)*/
.put("client.transport.ping_timeout", "30s").build();
client = new PreBuiltTransportClient(settings);
String[] ips = ip.split(",");
for (int i = 0; i < ips.length; i++) {
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ips[i]), port));
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
return client;
} /**
* 关闭连接
* @param client es客户端
*/
public void close(TransportClient client) {
client.close();
} /**
* 为集群添加新的节点
* @param name
* @param client es客户端
*/
public synchronized void addNode(String name,TransportClient client) {
try {
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(name), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
}
} /**
* 删除集群中的某个节点
* @param client es客户端
* @param name
*/
public synchronized void removeNode(String name,TransportClient client) {
try {
client.removeTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(name), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
}
} /**
* 创建mapping
* @param index 索引
* @param type 类型
* @param client es客户端
* @param xMapping mapping描述
*/
public void createBangMapping(String index, String type, XContentBuilder xMapping,TransportClient client) {
PutMappingRequest mapping = Requests.putMappingRequest(index).type(type).source(xMapping);
client.admin().indices().putMapping(mapping).actionGet(); } /**
* 创建索引
*
* @param index 索引名称
* @param client es客户端
*/
public void createIndex(String index,TransportClient client) {
CreateIndexRequest request = new CreateIndexRequest(index);
client.admin().indices().create(request);
} /**
* 根据信息自动创建索引与mapping
* 构建mapping描述 有问题
* @param fieldInfoList 字段信息
* @param client es客户端
* @return
*/
public void createIndexAndCreateMapping(String index, String type,List<FieldInfo> fieldInfoList,TransportClient client) {
XContentBuilder mapping = null;
try {
CreateIndexRequestBuilder cib=client.admin()
.indices().prepareCreate(index);
mapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("properties"); //设置之定义字段
for(FieldInfo info : fieldInfoList){
String field = info.getField();
String dateType = info.getType();
if(dateType == null || "".equals(dateType.trim())){
dateType = "String";
}
dateType = dateType.toLowerCase();
Integer participle = info.getParticiple();
if("string".equals(dateType)){
if(participle == 1) {
mapping.startObject(field)
.field("type","text")
.field("analyzer","ik_smart")
.endObject();
}else if(participle == 2){
mapping.startObject(field)
.field("type","text")
.field("analyzer","ik_max_word")
.endObject();
}else {
mapping.startObject(field)
.field("type","keyword")
.field("index","not_analyzed")
.endObject();
} }else if("date".equals(dateType)){
mapping.startObject(field)
.field("type",dateType)
.field("format","yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
.endObject();
}else {
mapping.startObject(field)
.field("type",dateType)
.field("index","not_analyzed")
.endObject();
} }
mapping.endObject()
.endObject();
cib.addMapping(type, mapping);
cib.execute().actionGet();
} catch (IOException e) {
System.out.println("创建索引发生异常");
}
} /**
* 创建索引与mapping模板
* @param index 索引字段
* @param type 类型
* @param client 客户端
* @throws IOException
*/
public void createMapping(String index, String type,TransportClient client) throws IOException { CreateIndexRequestBuilder cib=client.admin()
.indices().prepareCreate(index);
XContentBuilder mapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("properties") //设置之定义字段 .startObject("id")//字段id
.field("type","integer")//设置数据类型
.field("index","not_analyzed") .endObject()
.startObject("classs")
.field("type","integer")
.field("index","not_analyzed")
.endObject() .startObject("courseClass")
.field("type","integer")
.field("index","not_analyzed")
.endObject() .startObject("courseClassExam")
.field("type","integer")
.field("index","not_analyzed")
.endObject() .startObject("examnum")
.field("type","integer")
.field("index","not_analyzed")
.endObject() .startObject("ok")
.field("type","integer")
.field("index","not_analyzed")
.endObject() .startObject("room")
.field("type","integer")
.field("index","not_analyzed")
.endObject() .startObject("score")
.field("type","integer")
.field("index","not_analyzed")
.endObject() .startObject("student")
.field("type","integer")
.field("index","not_analyzed")
.endObject() .startObject("updatetime")
.field("type","integer")
.field("index","not_analyzed")
.endObject() .startObject("desc")
.field("type","text")
.field("analyzer","ik_smart")//ik_max_word
.endObject() .startObject("name")
.field("type","string")
.field("index","not_analyzed")
.endObject()
.endObject()
.endObject();
cib.addMapping(type, mapping);
cib.execute().actionGet();
}
}

elasticsearch 5.6.4自动创建索引与mapping映射关系 +Java语言的更多相关文章

  1. Elasticsearch索引的操作,利用kibana 创建/删除一个es的索引及mapping映射

    索引的创建及删除 1. 通过索引一篇文档创建了一个新的索引 .这个索引采用的是默认的配置,新的字段通过动态映射的方式被添加到类型映射. 利用Kibana提供的DevTools来执行命令,要创建一个索引 ...

  2. kibana自动创建索引

    一般索引按月.季或年为单位创建索引.我这里写成logstash-www-2019-03,www是URL的二级域名.格式类型完全根据自己方便就行. 当ELK集群中的索引过多时,我这里有100多个不同的日 ...

  3. apach hadoop2.6 集群利用Phoenix 4.6-hbase 批量导入并自动创建索引

    基础环境: 1.安装apach 版本hadoop2.6 2.部署hbase1.0.0 3.下载phoenix-4.6.0-HBase-1.0.下载地址(http://mirror.nus.edu.sg ...

  4. ES--Kibana相关操作创建索引和Mapping

    创建索引 kibana 使用如下命令进行创建索引内容. PUT test_index/ 创建别名 POST _aliases { "actions": [{ "add&q ...

  5. phoenix 利用CsvBulkLoadTool 批量带入数据并自动创建索引

    需要先创建表: CREATE TABLE IF NOT EXISTS population ( state CHAR() NOT NULL, city VARCHAR NOT NULL, popula ...

  6. 使用MyBatis Generator自动创建代码(dao,mapping,poji)

    连接的数据库为SQL server2008,所以需要的文件为sqljdbc4.jar 使用的lib库有: 在lib库目录下新建一个src文件夹用来存放生成的文件,然后新建generatorConfig ...

  7. [搜索]ElasticSearch Java Api(一) -添加数据创建索引

    转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...

  8. Elasticsearch(ES) 创建索引

    欢迎关注笔者的公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site/ ...

  9. ElasticSearch入门 第三篇:索引

    这是ElasticSearch 2.4 版本系列的第三篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

随机推荐

  1. C#泛型序列化困境

    [C#泛型序列化困境] 问题的起因是这样,有一个需求,将JsonArray转化为List,JsonArray中的元素均是string,此string可被转化为int.float.或维持string.我 ...

  2. 基于webpack的Vue.js开发环境快速搭建

    1. 安装node node下载地址 2. 安装淘宝 NPM npm 是node.js 的包管理工具. 镜像命令地址 #命令行: npm install -g cnpm 3. 安装vue # 全局安装 ...

  3. 126. Word Ladder II( Queue; BFS)

    Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transformat ...

  4. Qt's Undo Framework

    Overview of Qt's Undo Framework Introduction Qt's Undo Framework is an implementation of the Command ...

  5. 使用Log4J监控系统日志邮件警报

    使用Log4J监控系统日志邮件警报 前言 在系统上线后,有时候遇到系统故障,这时候就可以登录服务器查看系统日志来排查问题.但是需要登录服务器,下载查找相关异常日志比较麻烦.而且没有监控的话,也无法实时 ...

  6. DBA的工作职责和每日工作

    DBA一般职责 1.安装和升级数据库服务器,以及应用程序工具构建和配置网络环境. 2.熟悉数据库系统的存储结构预测未来的存储需求,制订数据库的存储方案. 3.根据开发人员设计的应用系统需求创建数据库存 ...

  7. 我们为什么要在 PHPStorm 中标记目录

    问题来源 (1)要开发的项目位于PHPStorm打开的项目的二级目录下,使用PHPStorm来开发Laravel项目 提供的教程在代码自动定位和智能提醒方面,存在无效的情况: (2)使用gulp作为项 ...

  8. ie8开发人员工具无法使用,按f12任务栏里出现任务,但是窗体不弹出

    楼主解决了么,刚出现你这样的问题,找了N久,终于解决了,他娘的,偏方啊任务栏不是出现那个箭头么,点击后没反应是吧在缩略图上点右键-最大化,然后就出来了,ctrl+p反正是可以出来调试模式 神人哪,IE ...

  9. PDF Document Creation, Viewing

    [PDF Document Creation, Viewing, and Transforming] Quartz provides the data type CGPDFDocumentRef to ...

  10. Spring源码解析 - ListableBeanFactory

    Extension of the {@link BeanFactory} interface to be implemented by bean factories that can enumerat ...