摘要:如或者接口接口用于根據(jù)一系列條件將別名指向一個新的索引,這些條件包括存續(xù)時間文檔數(shù)量和存儲容量等。但這種別名滾動并不會自動完成,需要主動調(diào)用接口。
別名,有點(diǎn)類似數(shù)據(jù)庫的視圖,別名一般都會和一些過濾條件相結(jié)合,可以做到即使是同一個索引上,讓不同人看到不同的數(shù)據(jù)。別名的訪問接口是_alias。
PUT test_index_v1{ "aliases": { "test_index": {} }}
put test_index_v2put test_index_v2/_alias/test_index2
GET _alias{ "test_index_v1" : { "aliases" : { "test_index" : { } } }, "test_index_v2" : { "aliases" : { "test_index2" : { } } }}GET _cat/aliases?valias index filter routing.index routing.search is_write_index.kibana_task_manager .kibana_task_manager_1 - - - -.kibana .kibana_1 - - - -test_index test_index_v1 - - - -test_index2 test_index_v2 - - - -
GET test_index_v1/_alias{ "test_index_v1" : { "aliases" : { "test_index" : { } } }}
delete test_index_v2/_alias/test_index2
別名的使用和索引差不多,比如:
put study_route/_alias/srget sr/_search
同時_aliases接口可以做批量操作,比如通過_aliases接口將一個別名關(guān)聯(lián)多個索引:
POST _aliases{ "actions": [ { "add": { "index": "logs-nginx.access-prod", "alias": "logs" } } ]}
index
and indices
參數(shù)還支持通配符*:
POST _aliases{ "actions": [ { "add": { "index": "logs-*", "alias": "logs" } } ]}
或者對于同一個index,我們給不同人看到不同的數(shù)據(jù),如my_index有個字段是team,team字段記錄了該數(shù)據(jù)是那個team 的。team之間的數(shù)據(jù)是不可見的。
POST /_aliases{ "actions": [ { "add": { "index": "my_index", "alias": "my_index_teamA_alias", "filter": { "term": { "team": "teamA" } } } }, { "add": { "index": "my_index", "alias": "my_index_teamB_alias", "filter": { "term": { "team": "teamB" } } } }, { "add": { "index": "my_index", "alias": "my_index_team_alias" } } ]}
只要有可能,盡量使用別名,推薦為Elasticsearch的每個索引都使用別名,因為在未來重建索引的時候,別名會賦予你更多的靈活性。假設(shè)一開始創(chuàng)建的索引只有一個主分片,之后你又決定為索引擴(kuò)容。如果為原有的索引使用的是別名,現(xiàn)在你可以修改別名讓其指向額外創(chuàng)建的新索引,而無須修改被搜索的索引之名稱(假設(shè)一開始你就為搜索使用了別名)。
另一個有用的特性是,在不同的索引中創(chuàng)建窗口。比如,如果為數(shù)據(jù)創(chuàng)建了每日索引,你可能期望一個滑動窗口涵蓋過去一周的數(shù)據(jù),別名就稱為last7days。然后,每天創(chuàng)建新的每日索引時,你可以將其加入別名,同時停用或者刪除第8天前的舊索引。
別名還能提供另一個特性,那就是路由。假設(shè)別名指向一個多帶帶的索引,那么它們也可以和路由一起使用,在查詢或索引
的時候自動地使用路由值。如:
POST /_aliases{ "actions": [ { "add": { "index": "test_index", "alias": "my_index_alias", "filter": { "match": { "lang": "Java" } }, "routing": "AKey" } }, { "add": { "index": "test_index", "alias": "my_index_alias2", "filter": { "match": { "lang": "Java" } }, "routing": "BKey" } } ]}
或者:
PUT test_index/_alias/ts{ "filter": { "match": { "lang": "Java" } }, "routing": "CKey"}
_rollover接口用于根據(jù)一系列條件將別名指向一個新的索引,這些條件包括存續(xù)時間、文檔數(shù)量和存儲容量等。這與日志文件使用的文件滾動類似,文件滾動是通過不斷創(chuàng)建新文件并滾動舊文件來保證日志文件不會過于龐大,而_rollover接口則是通過不斷將別名指向新的索引以保證索引容量不會過大。但這種別名滾動并不會自動完成,需要主動調(diào)用_rollover接口。
別名滾動的條件可通過conditions參數(shù)設(shè)置,包括max_age、max_docs和max_size等三個子參數(shù)。
例如,創(chuàng)建一個索引logs-1并分配別名logs:
PUT logs-1{ "aliases": { "logs": {} }}
然后調(diào)用logs別名的_rollover接口設(shè)置別名滾動條件,如:
POST /logs/_rollover{ "conditions": { "max_age": "10s", "max_docs": 10000, "max_size": "4gb" }}{ "acknowledged" : true, "shards_acknowledged" : true, "old_index" : "logs-1", "new_index" : "logs-000002", "rolled_over" : true, "dry_run" : false, "conditions" : { "[max_size: 4gb]" : false, "[max_age: 10s]" : true, "[max_docs: 10000]" : false }}
在示例中,logs別名指向logs-1索引,最大存活周期為10s,最大文檔數(shù)量10000條,最大存儲容量4GB。為了演示效果,特意將最大存活周期設(shè)置為10秒,從返回結(jié)果的conditions屬性來看,max_age這個條件返回true,所以會觸發(fā)索引滾動。
通過_cat/indices
接口就會發(fā)現(xiàn)有新的索引logs-000002產(chǎn)生:
get _cat/indices?vhealth status index uuid pri rep docs.count docs.deleted store.size pri.store.sizeyellow open logs-1 jjNxkUn1T1yD245qUH6SVQ 1 1 0 0 283b 283byellow open logs-000002 H85Y0qwQRnucttIc53t8CQ 1 1 0 0 230b 230b
再來看看別名:
get _cat/aliases?valias index filter routing.index routing.search is_write_indexlogs logs-000002 - - - -
logs-1的別名已經(jīng)被清空,而logs-000002的別名中則已經(jīng)添加了logs。新索引的命名規(guī)則在原索引名稱數(shù)字的基礎(chǔ)上加 1,并且將數(shù)值長度補(bǔ)0湊足6位。所以使用_rollover接口時,要求索引名稱必須以數(shù)字結(jié)尾,數(shù)字與前綴之間使用連接線“-”連接。
由于_rollover接口在滾動新索引時,會將別名與原索引的關(guān)聯(lián)取消,所以通過別名再想查找原文檔就不可能了。為了保證原文檔可檢索,可以通過別名is_write_index參數(shù)保留索引與別名的關(guān)系。當(dāng)使用is_write_index參數(shù)設(shè)置了哪一個索引為寫索引時,_rollover接口滾動別名指向索引時將不會取消別名與原索引之間的關(guān)系。它會將原索引的is_write_index參數(shù)設(shè)置為false,并將新索引的is_write_index參數(shù)設(shè)置為true。
例如在創(chuàng)建logs-4時指定參數(shù)is_write_index為true:
PUT /logs-4{ "aliases": { "logs4": { "is_write_index": true } }}
然后調(diào)用_rollover接口:
POST logs4/_rollover{ "conditions": { "max_age": "10s", "max_docs": 10000, "max_size": "4gb" }}{ "acknowledged" : true, "shards_acknowledged" : true, "old_index" : "logs-4", "new_index" : "logs-000005", "rolled_over" : true, "dry_run" : false, "conditions" : { "[max_size: 4gb]" : false, "[max_age: 10s]" : true, "[max_docs: 10000]" : false }}
然后查詢索引的別名:
GET _cat/aliases?valias index filter routing.index routing.search is_write_indexlogs4 logs-4 - - - falselogs4 logs-000005 - - - t
會發(fā)現(xiàn)logs-4的is_write_index參數(shù)被設(shè)置為false,而新生成索引logs-000005的is_write_index參數(shù)則為true。在兩者的別名列表中都包含有l(wèi)ogs4,可以繼續(xù)通過logs別名對原索引進(jìn)行查詢。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/125636.html
閱讀 3668·2023-01-11 11:02
閱讀 4210·2023-01-11 11:02
閱讀 3008·2023-01-11 11:02
閱讀 5148·2023-01-11 11:02
閱讀 4702·2023-01-11 11:02
閱讀 5486·2023-01-11 11:02
閱讀 5236·2023-01-11 11:02
閱讀 3865·2023-01-11 11:02