1. 程式人生 > >Elasticsearch筆記——索引管理

Elasticsearch筆記——索引管理

一、建立索引

put http://localhost:9200/<index> ,<index>是索引名,傳的JSON是這個索引的資料格式。

1、索引名不能包含任何大寫字母;

2、如果索引已存在,則丟擲索引已存在的異常;

3、elasticsearch 預設給一個索引設定5個分片1個分片,分派給定之後不再修改,副本可以隨時修改;

put http://localhost:9200/blog
結果:
{
    "acknowledged": true,
    "shards_acknowledged": true
}

建立3個分片0個副本名為bolg的索引
put http://localhost:9200/blog
{
	"settings": {
		"number_of_shards": 3,
		"number_of_replicas": 0
	}
}
結果:
{
    "acknowledged": true,
    "shards_acknowledged": true
}

二、修改副本

put http://localhost:9200/blog/_settings
{
	"number_of_replicas": 2
}
結果:
{
    "acknowledged": true
}

三、讀寫許可權

1、bloks.read_only:true  設定當前索引只允許讀不允許寫或者更新

2、blocks.read:true  設定對當前索引進行讀操作

3、blocks.write:true  設定對當前索引進行寫操作

put http://localhost:9200/blog/_settings
{
	"blocks.write": true
}
結果:
{
    "acknowledged": true
}

四、檢視索引

1、檢視索引的配置資訊:get  http://localhost:9200/blog/_settings

2、同時檢視多個索引的setting資訊:get  http://localhost:9200/blog2,blog/_settings

3、檢視叢集中所有索引的setting資訊:get  http://localhost:9200/_all/_settings

五、刪除索引

delete http://localhost:9200/<index>

六、索引的關閉與開啟

1、關閉索引:POST http://localhost:9200/<index>/_close

2、開啟索引:POST http://localhost:9200/<index>/_open

3、關閉或者開啟索引也支援批量操作:POST http://localhost:9200/<index>,<index>,<index>/_open

4、關閉或者開啟索引支援萬用字元方式,

      比如,關閉已 test 開頭的索引:POST http://localhost:9200/test*/_close

七、複製索引

      _reindex API可以吧文件從一個索引(源索引)複製到另一個索引(目標索引),目標索引不會複製源索引的配置資訊,_reindex 操作之前需要設定目標索引的分片數、副本數等配置資訊。

post http://localhost:9200/_reindex
{
	"source": {"index": "blog"},
	"dest": {"index": "blog2"}
}

也可以在源索引中新增 type 和 query 來限制文件,
比如把 blog 索引 article 型別下 title 中含有 git 關鍵字的文件複製到 blog2 索引中
post http://localhost:9200/_reindex
{
	"source": {
		"index": "blog",
		"type": "article",
		"query": {
			"term": {"title": "git"}
		}
	},
	"dest": {"index": "blog2"}
}

八、收縮索引

       一個索引的分片初始化以後是無法再做修改的,但可以使用 shrink index API 提供的縮小索引分片數機制,把一個索引變成一個更小分片的索引,但是收縮後的分片數必須是原始分片數的因子。收縮索引之前,索引中的每個分片都要在同一個節點上。

收縮索引步驟:

前提條件:

在縮小索引之前,索引必須被標記為只讀,所有分片都會複製到一個相同的節點並且節點健康值為綠色的。
put http://localhost:9200/<index>/_settings
{
	"index.routing.allocation.require._name": "shrink_node_name",
	"index.blocks.write": true
}

首先,建立一個新的目標索引,設定與源索引相同,但是新索引的分片數量較少。

然後,把源索引硬連結到目標索引。(如果檔案系統不支援硬連結,那麼所有段都被複制到新索引中,這是一個耗時的過程)

最後,新的索引恢復使用。

post http://localhost:9200/<index>/_shrink/<index_1>
{
	"settings": {
		"index.number_of_replicas": 0,
		"index.number_of_shards": 1,
		"index.codec": "best_compression"
	},
	"aliases": {
		"my_search_indices": {}
	}
}
結果:
{
    "acknowledged": true,
    "shards_acknowledged": true
}

九、索引別名

設定了別名後,對別名的操作等價於對索引的操作。

注意:如果別名和索引是一對一,使用別名索引文件或者根據id查詢文件是可以的,但是如果別名和索引是一對多的,使用別名會發生錯誤,因為elasticsearch 不知道把文件寫入哪個索引或者從哪個索引中讀取文件。

給一個索引新增別名:
post http://localhost:9200/_aliases
{
	"actions": [
		{ "add": { "index" : "<index>", "alias" : "<alias>"}}
	]
}

移除一個索引的別名:
post http://localhost:9200/_aliases
{
	"actions": [
		{ "remove": { "index" : "<index>", "alias" : "<alias>"}}
	]
}

一次給多個索引建立同一個別名:
post http://localhost:9200/_aliases
{
	"actions": [
		{ "add": { "index" : "<index1>", "alias" : "<alias>"}},
        { "add": { "index" : "<index2>", "alias" : "<alias>"}}
	]
}
或
post http://localhost:9200/_aliases
{
	"actions": [
		{ "add": { "index" : "["<index1>", "<index2>"]", "alias" : "<alias>"}}
	]
}

新增別名和移除別名也可以同時進行:
post http://localhost:9200/_aliases
{
	"actions": [
		{ "add": { "index" : "<index1>", "alias" : "<alias>"}},
        { "remove": { "index" : "<index2>", "alias" : "<alias>"}}
	]
}

檢視一個索引的別名:
get http://localhost:9200/<index>/_aliases

檢視別名對應哪些索引:
get http://localhost:9200/<aliase>/_aliases