常用的索引创建的三种方式:
- 直接创建索引
- 动态创建索引
- 使用模板创建索引
1.直接创建索引
插入数据前先指定index及type,5x版本要指定分片数量,例子如下:
建立一个名为my_index的索引,索引类型为my_type.禁用all字段,然后在把需要的字段放到_all中.
curl -XPUT ip:9200/my_index -d '{
"settings":{
"index": {
"refresh_interval" : "-1", //减少shard刷新间隔,用于大规模bulk插入,且对实时查询不要求时使用,完成bulk插入后再修改为1s
"number_of_shards": "20", //初始化20个主分片,分片数量确定后不可修改,非常重要
"translog.flush_threshold_size": "1024mb" //默认是200mb,增大这个参数可以允许translog在flush前存放更大的段(segment);更大的段的创建会减少flush的频率,并且更大的段合并越少,会减少磁盘IO,索引性能更高。
"number_of_replicas": "1", //设置1个备份,bulk导入大量的数据,可以考虑不要副本,设置为0
"max_result_window": 999999
}
},
"mappings" :{
"my_type" : {
"include_in_all": false, //禁用_all,可以在具体字段打开
"dynamic": "false",
"_source": {
"enabled": "true"
},
"_all": { "analyzer": "ik_max_word" },
"properties": {
"myid" : {
"type": "keyword",//5x后废弃了string,改为keyword和text
"index": "not_analyzed",
"include_in_all": true,
"store": true
}
}
}
}
}'
2.动态创建索引
修改elasticsearch.yml中的配置,之后提交数据时es会自动识别数据类型,然后创建索引及索引类型,但是不建议使用此方式.
#自动创建索引
action.auto_creat_index:true
3.使用模板创建索引
创建一个名为my_template的模板,匹配所有my_index开头的索引,匹配成功后会按照settings和mappings创建一个新的索引.
curl -XPUT ip:9200/_template/my_template -d'
{
"template": "my_index*", //匹配所有my_index开头的索引
"order":0, //当存在多个索引模板时并且某个索引两者都匹配时,使用order来确定模板合并顺序
"settings": {...},
"mappings" :{...}
}
//查看模板
curl -XGET ip:9200/_template/my_template
//更改模板方法,将PUT请求改为POST请求
//删除模板
curl -XDELETE ip:9200/_template/my_template
索引修改:
curl -XPUT ip:9200/my_index/_settings -d'{"index.number_of_replicas": 2}' //修改索引备份为两份