Elasticsearch入门

本文详细介绍了Elasticsearch中的索引管理操作,包括新建、更新副本、设置读写权限、查看、删除索引,以及索引的打开与关闭、复制、收缩、使用别名等功能。通过实际命令演示,帮助读者掌握Elasticsearch索引管理的全面知识。

1. 索引管理

1.1 新建索引

命令:

PUT: http://ip:9200/blog
复制代码

如果需要对索引设置,如设置副本,分片,分词器等, 配置参数

{
    "settings": {
        "index": {
            "number_of_shards": "5",
            "analysis": {
                "analyzer": {
                    "ik": {
                        "tokenizer": "ik_max_word"
                    }
                }
            },
            "number_of_replicas": "1"
        }
    }
}
复制代码

如图所示:

返回结果:

1.2 更新副本

Elasticsearch 默认给一个索引设置5个分片和一个副,一个索引的分片数一经指定后不可修改,但是副本数可以修改,将 blog 索引的副本设置为2,命令如下:

PUT: http://ip:9200/blog/_settings
{
    "number_of_reolicas": 2
}
复制代码

1.3 读写权限

  • blocks.read_only: true

    设置当前索引只允许读不允许写或者更新

  • blocks.read: true

    禁止 对当前索引进行读操作

  • blocks.write: true

    禁止 对当前索引进行写操作

    命令:

    PUT: http://ip:9200/blog/_settings
    {
      "blocks.write": true
    }
    复制代码

    命令执行完后就不能再往blog索引中写入数据,想要恢复写入权限,就把相应的属性设置为false即可。

1.4 查看索引

命令如下:

GET: ip:9200/blog/_settings
复制代码

返回数据:

{
    "blog": {
        "settings": {
            "index": {
                "number_of_shards": "5",
                "provided_name": "blog",
                "creation_date": "1547781765945",
                "analysis": {
                    "analyzer": {
                        "ik": {
                            "tokenizer": "ik_max_word"
                        }
                    }
                },
                "number_of_replicas": "2",
                "uuid": "TS__uhTyRWaOPMaWr6uA3A",
                "version": {
                    "created": "5060499"
                }
            }
        }
    }
}
复制代码

查看多个索引的settings信息:

GET: ip:9200/index1,index2,index3/_settings
复制代码

查看所有索引的settings信息:

GET: ip:9200/_all/_settings
复制代码
1.5 删除索引
DELETE: ip:9200/bank
复制代码

删除成功,返回:

{
    "acknowledged": true
}
复制代码

删除不存在的索引,会报索引未找到异常。

1.6 索引的打开与关闭

集群中的索引可以进行打开和关闭操作,一个关闭了的索引几乎不占系统资源。命令如下:

POST: ip:9200/blog/_close
复制代码

head 插件页面显示:

关闭了的索引可以重新开启,命令如下:

POST: ip:9200/blog/_open
复制代码

同时关闭/开启多个索引:

POST: ip:9200/index1,index2,index3/_close
POST: ip:9200/index1,index2,index3/_open
复制代码

如果不存在关闭/开启的索引,会抛出索引不存在的异常,可以通过 ignore_unavailable 参数来操作只存在的索引,命令如下:

POST: ip:9200/index1,index2,index3/_close?ignore_unavailable=true
复制代码

关闭/开启所有索引:

POST: ip:9200/_close/_close
复制代码

支持通配符操作, 如关闭以test开头的索引:

POST: ip:9200/index*/_close
复制代码
1.7 复制索引

_reindex API可以把一个文档从一个索引(源索引复制到另一个索引)(目标索引),目标索引不回复制索引中的配置信息。
_reidex 操作之前需要设置目标索引的分片数、副本数等信息.
把 blog 索引的所有文档复制到blog_new 索引中的命令为:

POST ip:9200/_reindex
{
    "source": {
        "index": "blog"
    },
    "dest": {
        "index": "blog_new"
    }
}
复制代码

也可以增加了 type 和 query 来限制文档, 如将 blog 索引中 type 为 article 类型下 title 中含有 Python 关键字的文档复制到 blog_new 中

POST ip:9200/_reindex
{
    "source": {
        "index": "blog",
        "type": "article",
        "query": {
            "term": {
                "title": "Python"
            }
        }
    },
    "dest": {
        "index": "blog_new"
    }
}
复制代码
1.8 收缩索引

索引的分片初始化之后是很难更改的,但是可以使用 shrink index API 提供的缩小索引的分片数机制,把索引变成一个分片更少的索引,但是收缩后的分片数必须是原始分片数的因子。

1.9 索引别名

索引别名就是给一个索引或者多个索引起的另一个名字。

POST ip:9200/_aliases
{
    "actions": [
	{
	    "add": {	
	        "index": "blog",
		"alias": "test"	
	    }
	}
    ]
}
复制代码

移除别名:

POST ip:9200/_aliases
{
    "actions": [
	{
	    "remove": {	
	        "index": "blog",
		"alias": "test"	
	    }
	}
    ]
}
复制代码

可以给多个索引创建同一个别名:

POST ip:9200/_aliases
{
    "actions": [
	{
	    "add": {	
	        "index": "blog",
		"alias": "test"	
	    }
	},
	 "add": {	
	        "index": "bank",
		"alias": "test"	
	    }
	}
    ]
}
复制代码

增加别名和移除别名混合使用:

POST ip:9200/_aliases
{
    "actions": [
	{
	    "remove": {	
	        "index": "blog",
		"alias": "test"	
	    }
	},
	 "add": {	
	        "index": "blog",
		"alias": "test1"	
	    }
	}
    ]
}
复制代码

如果索引别名和索引是一对一的,使用别名索引文档或者根据ID查询文档是可以的,但是如果别名和索引是一对多的,使用别名会发生错误,因为 Elasticsearch 不知道把文档写入哪个索引中或者从哪个索引中读取文档。

Elasticsearch 同样支持通过通配符来给多个索引设置别名。

查看一个索引的别名:

GET ip:9200/blog/_aliases
复制代码

返回:

{
    "blog": {
        "aliases": {
            "test1": {},
            "test2": {}
        }
    }   
}
复制代码

查看 test1 是哪些索引的别名:

GET ip:9200/test1/_aliases
复制代码

返回与上面一致:

{
    "blog": {
        "aliases": {
            "test1": {},
            "test2": {}
        }
    }   
}
复制代码

查看集群上所有可用的别名:

GET: ip:9200/_aliases
复制代码
  • 使用别名解决在在零停机下从旧索引切换到新索引。

    旧索引称为a,新索引称为b,他们拥有共同的别名c,而dao层查询的索引名也是c,当新的全量索引b重建完成之后,只需要解除旧索引a与别名c关系,然后添加新索引b与别名c的关系,就能完成无缝切换,中间对用户是无感知的,如果b有问题,那么随时都可以重新解除b的关系并恢复a,这就完成了所谓的回滚操作,非常简单优雅。

    参考文档 如何在Elasticsearch里面使用索引别名

转载于:https://juejin.im/post/5c3ffb4ee51d4551df6f0897

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值