摘要:如或者接口接口用于根據一系列條件將別名指向一個新的索引,這些條件包括存續時間文檔數量和存儲容量等。但這種別名滾動并不會自動完成,需要主動調用接口。
別名,有點類似數據庫的視圖,別名一般都會和一些過濾條件相結合,可以做到即使是同一個索引上,讓不同人看到不同的數據。別名的訪問接口是_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接口將一個別名關聯多個索引:
POST _aliases{ "actions": [ { "add": { "index": "logs-nginx.access-prod", "alias": "logs" } } ]}
index
and indices
參數還支持通配符*:
POST _aliases{ "actions": [ { "add": { "index": "logs-*", "alias": "logs" } } ]}
或者對于同一個index,我們給不同人看到不同的數據,如my_index有個字段是team,team字段記錄了該數據是那個team 的。team之間的數據是不可見的。
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的每個索引都使用別名,因為在未來重建索引的時候,別名會賦予你更多的靈活性。假設一開始創建的索引只有一個主分片,之后你又決定為索引擴容。如果為原有的索引使用的是別名,現在你可以修改別名讓其指向額外創建的新索引,而無須修改被搜索的索引之名稱(假設一開始你就為搜索使用了別名)。
另一個有用的特性是,在不同的索引中創建窗口。比如,如果為數據創建了每日索引,你可能期望一個滑動窗口涵蓋過去一周的數據,別名就稱為last7days。然后,每天創建新的每日索引時,你可以將其加入別名,同時停用或者刪除第8天前的舊索引。
別名還能提供另一個特性,那就是路由。假設別名指向一個多帶帶的索引,那么它們也可以和路由一起使用,在查詢或索引
的時候自動地使用路由值。如:
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接口用于根據一系列條件將別名指向一個新的索引,這些條件包括存續時間、文檔數量和存儲容量等。這與日志文件使用的文件滾動類似,文件滾動是通過不斷創建新文件并滾動舊文件來保證日志文件不會過于龐大,而_rollover接口則是通過不斷將別名指向新的索引以保證索引容量不會過大。但這種別名滾動并不會自動完成,需要主動調用_rollover接口。
別名滾動的條件可通過conditions參數設置,包括max_age、max_docs和max_size等三個子參數。
例如,創建一個索引logs-1并分配別名logs:
PUT logs-1{ "aliases": { "logs": {} }}
然后調用logs別名的_rollover接口設置別名滾動條件,如:
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,最大文檔數量10000條,最大存儲容量4GB。為了演示效果,特意將最大存活周期設置為10秒,從返回結果的conditions屬性來看,max_age這個條件返回true,所以會觸發索引滾動。
通過_cat/indices
接口就會發現有新的索引logs-000002產生:
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的別名已經被清空,而logs-000002的別名中則已經添加了logs。新索引的命名規則在原索引名稱數字的基礎上加 1,并且將數值長度補0湊足6位。所以使用_rollover接口時,要求索引名稱必須以數字結尾,數字與前綴之間使用連接線“-”連接。
由于_rollover接口在滾動新索引時,會將別名與原索引的關聯取消,所以通過別名再想查找原文檔就不可能了。為了保證原文檔可檢索,可以通過別名is_write_index參數保留索引與別名的關系。當使用is_write_index參數設置了哪一個索引為寫索引時,_rollover接口滾動別名指向索引時將不會取消別名與原索引之間的關系。它會將原索引的is_write_index參數設置為false,并將新索引的is_write_index參數設置為true。
例如在創建logs-4時指定參數is_write_index為true:
PUT /logs-4{ "aliases": { "logs4": { "is_write_index": true } }}
然后調用_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
會發現logs-4的is_write_index參數被設置為false,而新生成索引logs-000005的is_write_index參數則為true。在兩者的別名列表中都包含有logs4,可以繼續通過logs別名對原索引進行查詢。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125636.html
閱讀 3733·2023-01-11 11:02
閱讀 4243·2023-01-11 11:02
閱讀 3049·2023-01-11 11:02
閱讀 5180·2023-01-11 11:02
閱讀 4733·2023-01-11 11:02
閱讀 5532·2023-01-11 11:02
閱讀 5312·2023-01-11 11:02
閱讀 3985·2023-01-11 11:02