创建索引
对比关系型数据库,创建索引===创建数据库PUT http://127.0.0.1:9200/索引名
重复添加索引,会返回错误信息
查看全部索引
GET http://127.0.0.1:9200/_cat/indices?v
_cat
表示查看,indices 表示索引,整体含义是查看当前ES服务器中的所有索引
查看单个索引
GET http://127.0.0.1:9200/索引名
删除索引
DELETE http://127.0.0.1:9200/索引名
索引别名
给一个索引或者多个索引起的另一个名字典型的应用场景是针对索引使用的平滑切换
平滑操作是原子性的操作,应用端无感知
使用别名
- 方式一
- 创建索引
PUT http://127.0.0.1:9200/my_index
- 将别名 my_alias 指向my_index
PUT http://127.0.0.1:9200/my_index/_alias/my_alias
- 方式二,索引:my_index,新增别名my_alias
POST http://127.0.0.1:9200/_aliases
{ "actions": [ { "add": { "index": "my_index", "alias": "my_alias" }} ]}
- 方式三,增加别名和移除别名混合使用;给my_index移除别名,给my_index_v2新增别名
POST http://127.0.0.1:9200/_aliases
{ "actions": [ { "remove": { "index": "my_index", "alias": "my_alias" }} { "add": { "index": "my_index_v2", "alias": "my_alias" }} ] }
使用示例
假设我们每天全量数据同步到 es 的问答索引名为 qa_20200501,这种带有日期后缀的形式,调用索引查询的指定索引名是 qa 即可,当每天切换到最新数据的索引时,只需将现有的索引别名映射删除,将新的索引映射到别名下即可,操作示例POST http://127.0.0.1:9200/_aliases
{
"actions": [
{ "remove": { "index": "qa_20200501", "alias": "qa" }},
{ "add": { "index": "qa_20200502", "alias": "qa" }}
]
}
索引别名本质上是一个快捷方式或软链接,并且它是一个原子性的操作。
此外,**应用中使用别名而不是索引名,这样可以在任何时候重建索引
**
注意
如果别名和索引是一对多的,使用别名会发生错误,因为 es 不知道把文档写入哪个索引中去或者从哪个索引中读取文档
索引配置
静态配置:创建后不能修改
动态配置:可以随时修改
固定属性:创建后不能修改
固定属性
index.creation_date
:索引的创建时间戳。index.uuid
:索引的 uuid 信息。index.version.created
:索引的版本号。
静态配置
index.number_of_shards
:索引的主分片数,默认是 5。这个配置在索引创建后不能修改es.index.max_number_of_shards
设置索引最大分片数,默认为 1024。index.codec
:数据存储的压缩算法,默认值为 LZ4,可选值还有best_compression
,它比 LZ4 可以获得更好的压缩比(即占据较小的磁盘空间,但存储性能比 LZ4 低)。index.routing_partition_size
:路由分区数,如果设置了该参数,其路由算法为:( hash(_routing) + hash(_id) % index.routing_parttion_size ) % number_of_shards。如果该值不设置,则路由算法为 hash(_routing) % number_of_shardings,_routing 默认值为 _id。
配置分析器index.analysis
:分析器最外层的配置项,内部主要分为 char_filter、tokenizer、filter 和 analyzer。char_filter
:定义新的字符过滤器件。tokenizer
:定义新的分词器。filter
:定义新的 token filter,如同义词 filter。analyzer
:配置新的分析器,一般是char_filter、tokenizer 和一些 token filter 的组合。
索引动态配置
index.number_of_replicas
:索引主分片的副本数,默认值是 1,该值必须大于等于 0,这个配置可以随时修改。index.refresh_interval
:执行新索引数据的刷新操作频率,该操作使对索引的最新更改对搜索可见,默认为 1s。也可以设置为 -1 以禁用刷新
创建索引,自定义配置
PUT http://127.0.0.1:9200/索引名
{"settings":{"index":{"search":{"slowlog":{"level":"debug","threshold":{"fetch":{"warn":"1000ms","trace":"200ms","debug":"800ms","info":"500ms"},"query":{"warn":"1000ms","trace":"200ms","debug":"800ms","info":"500ms"}}}},"number_of_shards":"5","max_result_window":"500000","analysis":{"normalizer":{"my_normalizer":{"filter":["lowercase"],"type":"custom"}}},"number_of_replicas":"1"}}}