elasticsearch 5.6.4自动创建索引与mapping映射关系 +Java语言
由于业务上的需求 ,最近在研究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语言的更多相关文章
- Elasticsearch索引的操作,利用kibana 创建/删除一个es的索引及mapping映射
索引的创建及删除 1. 通过索引一篇文档创建了一个新的索引 .这个索引采用的是默认的配置,新的字段通过动态映射的方式被添加到类型映射. 利用Kibana提供的DevTools来执行命令,要创建一个索引 ...
- kibana自动创建索引
一般索引按月.季或年为单位创建索引.我这里写成logstash-www-2019-03,www是URL的二级域名.格式类型完全根据自己方便就行. 当ELK集群中的索引过多时,我这里有100多个不同的日 ...
- 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 ...
- ES--Kibana相关操作创建索引和Mapping
创建索引 kibana 使用如下命令进行创建索引内容. PUT test_index/ 创建别名 POST _aliases { "actions": [{ "add&q ...
- phoenix 利用CsvBulkLoadTool 批量带入数据并自动创建索引
需要先创建表: CREATE TABLE IF NOT EXISTS population ( state CHAR() NOT NULL, city VARCHAR NOT NULL, popula ...
- 使用MyBatis Generator自动创建代码(dao,mapping,poji)
连接的数据库为SQL server2008,所以需要的文件为sqljdbc4.jar 使用的lib库有: 在lib库目录下新建一个src文件夹用来存放生成的文件,然后新建generatorConfig ...
- [搜索]ElasticSearch Java Api(一) -添加数据创建索引
转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...
- Elasticsearch(ES) 创建索引
欢迎关注笔者的公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site/ ...
- ElasticSearch入门 第三篇:索引
这是ElasticSearch 2.4 版本系列的第三篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
随机推荐
- iOS开发者有价值的工具集
转载于:http://www.cocoachina.com/applenews/devnews/2014/0307/7936.html 我一直比较推崇聪明地工作要远胜于刻苦地工作.使用正确的工具可以帮 ...
- python 把txt文件分隔成0.8和0.2的比例的新文件
from math import sqrt import randomimport osfrom sklearn import cross_validation os.chdir("/*&q ...
- 使用jpcap获取网卡硬件
- Inception
http://baijiahao.baidu.com/s?id=1601882944953788623&wfr=spider&for=pc
- MySQL学习3---事务
MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据. 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务. 事务处理可以用来维护数据库的完整性,保证成批的 ...
- Django web 应用 http 协议 web框架
一:什么是web 应用程序 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 应用程序有两种模式C/S.B/S. ...
- 购买阿里云的云服务器时选择镜像centos时应该选择哪个版本
购买阿里云的云服务器时选择镜像centos时应该选择哪个版本 方法/步骤首先,我们要清楚的便是每个系统之间的差别,以及在阿里云上的差别:1. Windows1.1) 系统内含正版激活.1.2) 适合于 ...
- Composer安装和使用 - Windows
记录windows下安装和使用Composer的方法 1,使用安装程序 这是将 Composer 安装在你机器上的最简单的方法. 下载并且运行 Composer-Setup.exe,它将安装最新版本的 ...
- Google Tango Java SDK开发:Motion Tracking 运动追踪
Java API Motion Tracking Tutorial运动追踪教程 This page describes how the Java API handles motion tracking ...
- android分屏
上手了Android N Preview,第一个不能错过的新特性就是App分屏的支持.Android7.0原生系统就可以支持两个App横屏并排或者竖屏上下摆放了.第二个新特性就是在Android TV ...