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