设为首页 收藏本站
查看: 1397|回复: 0

[经验分享] ElasticSearch入门- 设置分片副本数量及putMapping

[复制链接]

尚未签到

发表于 2017-5-21 08:11:47 | 显示全部楼层 |阅读模式
  在之前的一篇文章中,写到如何创建mapping。里面只是简单的创建了一个mapping。其实,这种比较重要并且一旦建立无法修改的操作还是需要仔细规划的。
  今天我介绍设置index的分片数量及副本数量,即创建索引的如何指定分片的个数及副本的个数。分片的个数在创建之后是无法再增加和减少的,除非你另外建一个索引库,而副本是可以在运行的时候,动态增加和减少。因此,在创建索引库时,规划好分片(Shard)是非常重要的。
  1、如何在创建index时,指定分片的个数?
  其实代码也很简单。

Settings settings = ImmutableSettings.settingsBuilder()
//5个主分片
.put("number_of_shards", 5)
//测试环境,减少副本提高速度
.put("number_of_replicas", 0).build();
  在非生产环境,这个副本最好设置成0,即不保留副本,因为每增加一个副本,写数据的成本就增加一倍。本来elasticsearch写的速度就比较慢。
  2、如果在创建Index时,顺便把type的mapping也创建?

//首先创建索引库
CreateIndexResponse  indexresponse = client.admin().indices()
//这个索引库的名称还必须不包含大写字母
.prepareCreate("testindex").setSettings(settings)
//这里直接添加type的mapping
.addMapping("testType", getMapping())
  有几个type就addMapping几个。
  综合起来的代码:

import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import com.donlianli.es.ESUtils;
/**
* 创建索引时,指定分片及副本
* 并且创建type一起执行
* @author donlianli@126.com
*/
public class PutMappingTest {
public static void  main(String[] argv) throws Exception{
Client client = ESUtils.getClient();
Settings settings = ImmutableSettings.settingsBuilder()
//5个主分片
.put("number_of_shards", 5)
//测试环境,减少副本提高速度
.put("number_of_replicas", 0).build();
//首先创建索引库
CreateIndexResponse  indexresponse = client.admin().indices()
//这个索引库的名称还必须不包含大写字母
.prepareCreate("testindex").setSettings(settings)
//这里直接添加type的mapping
.addMapping("testType", getMapping())
.execute().actionGet();
System.out.println(indexresponse.isAcknowledged());
}
/**
* mapping 一旦定义,之后就不能修改。
* @return
* @throws Exception
*/
private static XContentBuilder getMapping() throws Exception{
XContentBuilder mapping = jsonBuilder()  
.startObject()  
.startObject("test")  
.startObject("properties")         
.startObject("id")
.field("type", "long")
.field("store", "yes")
.endObject()   
.startObject("type")
.field("type", "string")
.field("index", "not_analyzed")
.endObject()  
.startObject("catIds")
.field("type", "integer")
.endObject()  
.endObject()  
.endObject()  
.endObject();  
return mapping;
}
}
  3、如果修改副本的数量?

import org.elasticsearch.action.admin.indices.settings.UpdateSettingsResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import com.donlianli.es.ESUtils;
/**
* 更新副本个数
* @author donlianli@126.com
*/
public class UpdateReplicaTest {
public static void  main(String[] argv) throws Exception{
Client client = ESUtils.getClient();
Settings settings =  ImmutableSettings.settingsBuilder()
//可以更新的配置还有很多,见elasticsearch官网
.put("number_of_replicas", 2).build();
//首先创建索引库
UpdateSettingsResponse  updateSettingsResponse = client.admin().indices()
.prepareUpdateSettings("testindex").setSettings(settings).execute().actionGet();
System.out.println(updateSettingsResponse);
}
}

对这类话题感兴趣?欢迎发送邮件至donlianli@126.com


关于我:邯郸人,擅长Java,Javascript,Extjs,oracle sql。

更多我之前的文章,可以访问 我的空间

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-379457-1-1.html 上篇帖子: elasticsearch中字段Doc_values解析 下篇帖子: ElasticSearch教程(1)——安装ES和开发环境准备
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表