索引创建代码使用官方给的示例代码,我把它在java项目里实现了一遍。

官方示例

1、创建索引

/**
* Java创建Index
*/
public void CreateIndex() {
int i = 0;
List<IndexDomain> list = getIndexList(); for (IndexDomain indexDomain : list) {
if (indexExists(indexDomain.getIndex())) {
continue;
} // create indexDomain, setting, put mapping
adminClient.prepareCreate(indexDomain.getIndex())
.setSettings(Settings.builder()
.put("indexDomain.number_of_shards", indexDomain.getNumber_of_shards())
.put("indexDomain.number_of_replicas", indexDomain.getNumber_of_replicas())
)
.addMapping(indexDomain.getType(), indexDomain.getFieldsJson())
.get(); i++;
}
System.out.println("IndexDomain creation success! create " + i + " IndexDomain");
}

2、附一些其它小方法:

2.1 集群初始化

private Client client;
private IndicesAdminClient adminClient; /**
* 构造方法 单例
*/
public Elasticsearch() {
try {
init();
} catch (Exception e) {
System.out.println("init() exception!");
e.printStackTrace();
}
adminClient = client.admin().indices();
} /**
* 集群配置初始化方法
*
* @throws Exception
*/
private void init() throws Exception {
// 读取配置文件中数据
Properties properties = readElasticsearchConfig();
String clusterName = properties.getProperty("clusterName");
String[] inetAddresses = properties.getProperty("hosts").split(","); Settings settings = Settings.builder().put("cluster.name", clusterName).build(); client = new PreBuiltTransportClient(settings); for (int i = 0; i < inetAddresses.length; i++) {
String[] tmpArray = inetAddresses[i].split(":");
String ip = tmpArray[0];
int port = Integer.valueOf(tmpArray[1]); client = ((TransportClient) client).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ip), port));
}
}

2.2 读取ES配置信息

/**
* 读取ES配置信息
*
* @return
*/
public Properties readElasticsearchConfig() {
Properties properties = new Properties();
try {
InputStream is = this.getClass().getClassLoader().getResourceAsStream("elasticsearch.properties");
properties.load(new InputStreamReader(is, "UTF-8"));
} catch (IOException e) {
System.out.println("readEsConfig exception!");
e.printStackTrace();
}
return properties;
}

elasticsearch.properties

hosts: 192.168.33.5:9300,192.168.33.50:9300
clusterName: my-es-analyze

2.3 读取json配置文件

/**
* 读取json配置文件
*
* @return JSONArray
* @throws IOException
*/
public JSONArray readJosnFile() throws IOException {
InputStream is = this.getClass().getClassLoader().getResourceAsStream("index.json");
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
StringBuffer sb = new StringBuffer();
String tmp = null;
while ((tmp = br.readLine()) != null) {
sb.append(tmp);
}
JSONArray result = JSONArray.parseArray(sb.toString());
return result;
}

index.json

[
{
"index": "caixiao",
"type": "compensate",
"number_of_shards": 2,
"number_of_replicas": 1,
"fieldsSource": {
"compensate": {
"properties": {
"name": {
"type": "string"
},
"message": {
"type": "string"
},"createtime": {
"type": "date"
}
}
}
}
}
]

2.4 判断集群中索引是否存在

/**
* 判断集群中{Index}是否存在
*
* @param index
* @return 存在(true)、不存在(false)
*/
public boolean indexExists(String index) {
IndicesExistsRequest request = new IndicesExistsRequest(index);
IndicesExistsResponse response = adminClient.exists(request).actionGet();
if (response.isExists()) {
return true;
}
return false;
}

2.5 创建索引实体类

/**
* 获取要创建的index列表
*
* @return List<IndexDomain>
*/
public List<IndexDomain> getIndexList() { List<IndexDomain> result = new ArrayList<IndexDomain>();
JSONArray jsonArray = null;
try {
jsonArray = readJosnFile();
} catch (IOException e) {
System.out.println("readJsonFile exception!");
e.printStackTrace();
} if (jsonArray == null || jsonArray.size() == 0) {
return null;
} for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
IndexDomain indexDomainObject = new IndexDomain();
String index = jsonObject.getString("index");
String type = jsonObject.getString("type");
Integer number_of_shards = jsonObject.getInteger("number_of_shards");
Integer number_of_replicas = jsonObject.getInteger("number_of_replicas");
String fieldsSource = jsonObject.get("fieldsSource").toString(); indexDomainObject.setIndex(index);
indexDomainObject.setType(type);
indexDomainObject.setFieldsJson(fieldsSource);
indexDomainObject.setNumber_of_shards(number_of_shards);
indexDomainObject.setNumber_of_replicas(number_of_replicas);
result.add(indexDomainObject);
}
return result;
}

2.6 索引实体类

public class IndexDomain {
private String index; //索引名
private String type; //type表名
private Integer number_of_shards; //分片数
private Integer number_of_replicas; //备份数
private String fieldsJson; //字段类型 public String getIndex() {
return index;
} public void setIndex(String index) {
this.index = index;
} public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public String getFieldsJson() {
return fieldsJson;
} public void setFieldsJson(String fieldsJson) {
this.fieldsJson = fieldsJson;
} public Integer getNumber_of_shards() {
return number_of_shards;
} public void setNumber_of_shards(Integer number_of_shards) {
this.number_of_shards = number_of_shards;
} public Integer getNumber_of_replicas() {
return number_of_replicas;
} public void setNumber_of_replicas(Integer number_of_replicas) {
this.number_of_replicas = number_of_replicas;
}
}

2.7 log4j2.properties

appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout rootLogger.level = info
rootLogger.appenderRef.console.ref = console

2.8 pom文件依赖

<properties>
<elasticsearch.version>5.3.0</elasticsearch.version>
<log4j.version>2.8.2</log4j.version>
<fastjson.version>1.2.31</fastjson.version>
</properties> <dependencies>
<!-- Elasticsearch -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>${elasticsearch.version}</version>
</dependency> <!-- Log4j -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency> <!-- Alibaba Json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
</dependencies>

Elasticsearch5.x创建索引(Java)的更多相关文章

  1. elasticsearch 5.6.4自动创建索引与mapping映射关系 +Java语言

    由于业务上的需求 ,最近在研究elasticsearch的相关知识 ,在网上查略了大部分资料 ,基本上对elasticsearch的数据增删改都没有太大问题 ,这里就不做总结了  .但是,在网上始终没 ...

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

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

  3. java mongodb 基础系列---查询,排序,limit,$in,$or,输出为list,创建索引,$ne 非操作

    官方api教程:http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/#getting-started ...

  4. ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)

    ElasticSearch6.0  Java API  使用     排序,分组 ,创建索引,添加索引数据,打分等 如果此文章对你有帮助,请关注一下哦 1.1 搭建maven 工程  创建web工程 ...

  5. ElasticSearch(java) 创建索引

    搜索]ElasticSearch Java Api(一) -创建索引 标签: elasticsearchapijavaes 2016-06-19 23:25 33925人阅读 评论(30) 收藏 举报 ...

  6. Elastic Search Java Api 创建索引结构,添加索引

    创建TCP客户端 Client client = new TransportClient() .addTransportAddress(new InetSocketTransportAddress( ...

  7. Java High Level REST Client 之 创建索引

    1. 创建索引请求 CreateIndexRequest request = new CreateIndexRequest("twitter"); 2.设置 2.1 分别设置 2. ...

  8. Solr DIH以Mysql为数据源批量创建索引

    演示使用solr管理后台,以mysql为数据源,批量建索引的方法 测试于:Solr 4.5.1, mmseg4j 1.9.1, Jdk 1.6.0_45, Tomcat 6.0.37 | CentOS ...

  9. lucene创建索引简单示例

    利用空闲时间写了一个使用lucene创建索引简单示例, 1.使用maven创建的项目 2.需要用到的jar如下: 废话不多说,直接贴代码如下: 1.创建索引的类(HelloLucene): packa ...

随机推荐

  1. windous----常用命令集合

    Windous常用命令 winver---------检查Windows版本 wmimgmt.msc----打开windows管理体系结构(WMI) wupdmgr--------windows更新程 ...

  2. db2 MON_GET_PKG_CACHE_STMT 表函数 抓取分析SQL

    MON_GET_PKG_CACHE_STMT 表函数 还可以使用 MON_GET_PKG_CACHE_STMT 表函数来查询当前 PACKAGE CACHE 中 SQL 语句(包括动态 SQL 和静态 ...

  3. 通过Docker构建TensorFlow Serving

    最近在用Docker搭建TensorFlow Serving, 在查阅了官方资料后,发现其文档内有不少冗余的步骤,便一步步排查,终于找到了更简单的Docker镜像构建方法.这里有两种方式: 版本一: ...

  4. centos 7 部署 MQTT

    官方教程  :头痛的是nginx 和 mqtt布局有所冲突,后台不能使用需要调整,当然是用 nginx自家的布局没问题,但是要收费 官方地址 1.由于emqttd是用Erlang语言编写的,所以,在L ...

  5. SMB服务简介

      1.Samba简介 Samba是种自由软件,用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet F ...

  6. Java编程:删除 List 元素的三种正确方法

    删除 List 中的元素会产生两个问题: 删除元素后 List 的元素数量会发生变化: 对 List 进行删除操作可能会产生并发问题: 我们通过代码示例演示正确的删除逻辑 package com.ip ...

  7. Vue 超快速学习

    Vue 超快速学习 基础知识: 1.vue的生命周期: beforeCreate/created. beforeMount/mounted. beforeUpdate/updated. beforeD ...

  8. linux系统操作笔记

    tar  cvf  test.tar  /etc gzip  test.tar bzep2 test.tar 归档压缩 tar czf  test.tar.gz  /etc vi  /etc/test ...

  9. 篮球游戏AI预研

    参考文献: 1.体育竞技游戏的团队AI http://blog.csdn.net/skywind/article/details/44922877 2.

  10. xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at[转载]

    今天在添加友盟统计的podfile pod install报错了: bogon:Children songximing$ pod install /Library/Ruby/Gems//gems/co ...