ElasticSearch版本:6.5.0(点击跳转官方文档)
这个索引,就像是传统关系型数据库中的数据库,在 Elasticsearch 中它是相关文档存储的地方。
在实际应用中,不宜向单个索引持续写数据,直到它的分片巨大无比。 巨大的索引在数据老化后会难以删除。以 _id 为单位删除文档不会立即释放空间,删除的doc(文档)只有在Lucene分段合并时才会真正从磁盘中删除。 如果手动触发分段合并,会引起较高的I/O压力;并且可能会因为分段巨大导致合并过程中存储不足。
建议周期性创建新索引。
例如:
有一个索引 advertisement,可以将其命名为 advertisement_20200201。 按照这个格式,每天创建一个新索引。 然后创建一个名为 advertisement 的别名,来关联这些索引。
这样对于业务来说,读取时使用的名称不变,当需要删除数据的时候,可以直接删除整个索引。
1. 索引别名
索引别名就像一个代理,它可以指向一个或多个索引。
可以用于实现索引分组,或者索引间的无缝切换
碍于篇幅,别名后面专门说
2. 创建索引
使用如下的命令
1 | put /demo/testDate/1 |
如果URL中的索引不存在,es会为我们自动创建索引。
还可以通过下面的命令来创建索引。
1 | PUT /blog |
响应报文
1 | { |
我们看下head插件中的结果:
很多时候,需要自定义设置(设置索引结果、分片数目)时,需要手动创建索引。
3. 手动创建索引
如果输错了单词,却被es自动创建了索引,这是很麻烦的。
我们可以通过修改修改elasticsearch.yml配置文件,来关闭自动创建索引功能。
1 | action.auto_create_index: false |
修改完上面的配置以后,我们再尝试创建一个文档,指定新的index名称
1 | put /blog2/blogData/1 |
响应报文
1 | { |
通过响应报文发现,es已经不再为我们自动创建索引了。
我们通过指定命令创建索引
1 | PUT /blog2 |
指定分片数量2,,副本数量2
响应报文
1 | { |
我们看下head上面的信息:
没问题,已经创建了blog2索引
4. 删除索引
执行以下命令
1 | DELETE /blog2 |
响应报文
1 | { |
这样子,上面创建的索引就被删除了。
删除索引也可以使用curl命令,如:
1 | curl -XDELETE 'http://127.0.0.1:9200/testdata' |
5. Reference
- 《Elasticsearch源码解析与优化实战》