Elasticsearch5.x创建索引(Java)
索引创建代码使用官方给的示例代码,我把它在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)的更多相关文章
- elasticsearch 5.6.4自动创建索引与mapping映射关系 +Java语言
由于业务上的需求 ,最近在研究elasticsearch的相关知识 ,在网上查略了大部分资料 ,基本上对elasticsearch的数据增删改都没有太大问题 ,这里就不做总结了 .但是,在网上始终没 ...
- [搜索]ElasticSearch Java Api(一) -添加数据创建索引
转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...
- java mongodb 基础系列---查询,排序,limit,$in,$or,输出为list,创建索引,$ne 非操作
官方api教程:http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/#getting-started ...
- ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)
ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等 如果此文章对你有帮助,请关注一下哦 1.1 搭建maven 工程 创建web工程 ...
- ElasticSearch(java) 创建索引
搜索]ElasticSearch Java Api(一) -创建索引 标签: elasticsearchapijavaes 2016-06-19 23:25 33925人阅读 评论(30) 收藏 举报 ...
- Elastic Search Java Api 创建索引结构,添加索引
创建TCP客户端 Client client = new TransportClient() .addTransportAddress(new InetSocketTransportAddress( ...
- Java High Level REST Client 之 创建索引
1. 创建索引请求 CreateIndexRequest request = new CreateIndexRequest("twitter"); 2.设置 2.1 分别设置 2. ...
- Solr DIH以Mysql为数据源批量创建索引
演示使用solr管理后台,以mysql为数据源,批量建索引的方法 测试于:Solr 4.5.1, mmseg4j 1.9.1, Jdk 1.6.0_45, Tomcat 6.0.37 | CentOS ...
- lucene创建索引简单示例
利用空闲时间写了一个使用lucene创建索引简单示例, 1.使用maven创建的项目 2.需要用到的jar如下: 废话不多说,直接贴代码如下: 1.创建索引的类(HelloLucene): packa ...
随机推荐
- select2 javascript控件 如何设置指定的值
$("#id").select2("data") 这样的方法无效 要使用$("#selectNull").val("") ...
- Android所有Demo资源汇总,太全了(申明:来源于网络)
Android所有Demo资源汇总,太全了(申明:来源于网络) 地址:http://bbs.csdn.net/topics/391928947
- db2 v11 安装测试
一.准备环境: 修改/etc/hosts如下配置: #vi /etc/hosts 127.0.0.1 localhost 修改系统内核参数 # vi /etc/sysctl.conf kerne ...
- PL-SVO
pl-svo对第一帧提取点和线段特征,点特征直接保存为Point2f就行,对于线段特征保存线段的两个端点 void detectFeatures( FramePtr frame, vector< ...
- 泡泡一分钟:Exploiting Points and Lines in Regression Forests for RGB-D Camera Relocalization
Exploiting Points and Lines in Regression Forests for RGB-D Camera Relocalization 利用回归森林中的点和线进行RGB-D ...
- [转载]Invalid bound statement (not found): com.taotao.mapper.TbItemMapper.selectByExample: 错误
因碰到同样的问题,使用该方法对我有效,为方便以后查找,所以做了转载,原文请查看:https://www.cnblogs.com/fifiyong/p/5795365.html 在Maven工程下,想通 ...
- 超级有用的15个mysqlbinlog命令
在MySQL或MariaDB中,任意时间对数据库所做的修改,都会被记录到日志文件中.例如,当你添加了一个新的表,或者更新了一条数据,这些事件都会被存储到二进制日志文件中.二进制日志文件在MySQL主从 ...
- 存储空间消耗磁盘比较 int varchar date
小结: 1.日期类型按照date存储节省空间,仅3字节,而按照字符串型char 8字节 20190316 , varchar 20190316 9字节: 2.对于小于32768的整数,按照smal ...
- Xcode 编辑器之Workspace,Project,Scheme,Target
一,前言 最近老是突然对Workspace,Project,Scheme,Target四者的关系有些疑惑,所以查阅资料总结一下. 二,Workspace,Project,Scheme,Target四者 ...
- 新装的Delphi XE10 空白的安卓程序编译报错 F1027 Unit not found: 'System.pas'
没有安装 安卓的lib 和 PlatformSDKs 把相关压缩包解压缩后,将对应文件夹android放在lib下面 , PlatformSDKs放在D:\Program Files (x86)\Em ...