在之前的一篇文章中,写到如何创建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。
更多我之前的文章,可以访问 我的空间
相关推荐
赠送jar包:elasticsearch-x-content-6.3.0.jar; 赠送原API文档:elasticsearch-x-content-6.3.0-javadoc.jar; 赠送源代码:elasticsearch-x-content-6.3.0-sources.jar; 赠送Maven依赖信息文件:elasticsearch-x...
赠送jar包:elasticsearch-rest-high-level-client-6.8.3.jar; 赠送原API文档:elasticsearch-rest-high-level-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-high-level-client-6.8.3-sources.jar;...
赠送jar包:elasticsearch-rest-client-6.8.3.jar; 赠送原API文档:elasticsearch-rest-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-client-6.8.3-sources.jar; 赠送Maven依赖信息文件:elastic...
最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip
最新版windows elasticsearch-8.8.2-windows-x86_64.zip最新版windows elasticsearch-8.8.2-windows-x86_64.zip最新版windows elasticsearch-8.8.2-windows-x86_64.zip最新版windows elasticsearch-8.8.2-windows-...
赠送jar包:elasticsearch-rest-high-level-client-6.8.3.jar; 赠送原API文档:elasticsearch-rest-high-level-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-high-level-client-6.8.3-sources.jar;...
适用于7.17.1系列,例如Elasticsearch的7.17.12版本。 elasticsearch-analysis-ik 是一个常用的中文分词器,在 Elasticsearch 中广泛应用于中文文本的分析和搜索。下面是 elasticsearch-analysis-ik 分词器的几个...
elasticsearch-analysis-ik-7.17.0
最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip
elasticsearch-analysis-ik-7.14.0-c.zip elasticsearch-analysis-ik-7.14.0-c.zip elasticsearch-analysis-ik-7.14.0-c.zip
最新版 elasticsearch-analysis-ik-7.10.2.zip最新版 elasticsearch-analysis-ik-7.10.2.zip
kettle 支持elasticsearch7.x 批量上传的插件,减压后放到data-integration\plugins 目录下即可
最新版 elasticsearch-analysis-ik-7.17.6.zip最新版 elasticsearch-analysis-ik-7.17.6.zip
elasticsearch-8.11.0的分词器,配合es同版本使用,有粗粒度和细粒度分词
elasticsearch-repository-oss-6.7.0, elasticsearch-repository-oss-6.7.2从oss恢复es快照到集群插件。
赠送jar包:elasticsearch-x-content-6.3.0.jar; 赠送原API文档:elasticsearch-x-content-6.3.0-javadoc.jar; 赠送源代码:elasticsearch-x-content-6.3.0-sources.jar; 赠送Maven依赖信息文件:elasticsearch-x...
elasticsearch-jieba-plugin 是 Jieba 中文分词插件。试用 Elasticsearch 5.1.2 版本,基于 huaban 开源的的 jieba java 实现。使用checkout tag: v5.1.2git checkout v5.1.2运行gradle buildPluginZip创建 ...
分布式搜索elasticsearch高级配置之(一)--- 分片分布规则设置 13 分布式搜索elasticsearch高级配置之(二)--- 线程池设置 16 分布式搜索elasticsearch研究--- shard和replica的选择 18 分布式搜索elasticsearch...
ETL工具kettle7.1抽取数据目前不支持elasticsearch 2.X以上版本,如果想要支持elasticsearch 6.X以上版本,必须替换elasticsearch-bulk-insert-plugin插件,该资源提供该插件的替换。 具体步骤为在spoon kettle\data-...
elasticsearch-analysis-ik-7.4.0