Elasticsearch Indices APIs 索引别名

翻译自官网, 水平有限,用于自查。转载请注明网址: http://www.jianshu.com/p/2fcd45128405

索引别名

Elasticsearch的api在处理指定索引时接受索引名称, 并可能接受多个索引。索引别名API允许为索引提供一个别名。 所有API自动将别名切换到实际的索引名称。 一个别名可以映射到多个索引, 当指定它时, 别名会自动扩展到别名索引。 一个别名也可以与一个过滤器相关联, 这个过滤器在搜索和路由的时候被自动应用。 别名不能具有与索引相同的名称。

这里有一个将别名alias1和索引test建立联系的例子:

POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "test1", "alias" : "alias1" } }
    ]
}

移除这个别名:

POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "test1", "alias" : "alias1" } }
    ]
}

重命名一个别名使用相同的API, 是一个简单的删除再添加的操作。 这是一个原子操作, 不需要担心在一个短时间内别名无法指向索引。

POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "test1", "alias" : "alias1" } },
        { "add" : { "index" : "test2", "alias" : "alias1" } }
    ]
}

将一个别名和多个索引建立联系,简单地应用多个add动作:

POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "test1", "alias" : "alias1" } },
        { "add" : { "index" : "test2", "alias" : "alias1" } }
    ]
}

多个索引可以通过一个带有索引数组语法的操作指定:

POST /_aliases
{
    "actions" : [
        { "add" : { "indices" : ["test1", "test2"], "alias" : "alias1" } }
    ]
}

通过相应的aliases数组语法, 可以在一个动作中指定多个别名。
对于上面的例子, 也可以使用glob pattern建立一个别名到多个索引的联系 :

POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "test*", "alias" : "all_test_indices" } }
    ]
}

在这个例子中, 别名是一个时间点别名, 将对所有当前匹配的索引进行分组, 当匹配该模式的新索引被添加或删除时, 它不会自动更新。

索引到一个指向多索引的别名是一个错误的操作。

可以在一个操作中用别名交换索引:

PUT test                   //1 
PUT test_2               //2
POST /_aliases
{
"actions" : [
{ "add": { "index": "test_2", "alias": "test" } },
{ "remove_index": { "index": "test" } }  //3
]
}
  1. 一个我们错误创建的索引
  2. 我们应该添加的索引
  3. remove_index 同 Delete Index

过滤的别名

带有过滤器的别名提供了创建相同索引不同“视图”的简便方法。 可以使用查询DSL定义过滤器, 并将其应用于所有搜索、计数、删除查询以及类似的使用别名的操作。

要建立一个过滤的别名, 首先我们要确定映射中的字段已存在:

PUT /test1
{
  "mappings": {
    "type1": {
      "properties": {
        "user" : {
          "type": "keyword"
        }
      }
    }
  }
}

现在我们可以使用一个user的过滤器来建立一个别名:

POST /_aliases
{
    "actions" : [
        {
            "add" : {
                 "index" : "test1",
                 "alias" : "alias2",
                 "filter" : { "term" : { "user" : "kimchy" } }
            }
        }
    ]
}

路由

可以将路由和别名关联起来。 这个特性可以与过滤的别名一起使用, 以避免不必要的分片操作。

如下命令建立一个新别名alias1, 指向索引test。 在alias1创建后, 所有对这个别名的操作自动修改为使用值 1 来路由:

POST /_aliases
{
    "actions" : [
        {
            "add" : {
                 "index" : "test",
                 "alias" : "alias1",
                 "routing" : "1"
            }
        }
    ]
}

也可以对搜索和索引指定不同的路由:

POST /_aliases
{
    "actions" : [
        {
            "add" : {
                 "index" : "test",
                 "alias" : "alias2",
                 "search_routing" : "1,2",
                 "index_routing" : "2"
            }
        }
    ]
}

如上例所示, 搜索路由可能包含多个逗号分隔的值。 索引路由只能包含一个单值。

如果一个搜索操作使用了路由别名并且有一个路由参数, 则使用别名中搜索路由和参数指定的路由的交集。 例如, 以下命令将使用“2”作为路由值:

GET /alias2/_search?q=user:kimchy&routing=2,3

如果一个索引操作使用索引路由别名并且有一个父路由( parent routing ), 父路由会被忽略。

添加一个单独的别名

一个别名也可以通过如下端点添加:

PUT /{index}/_alias/{name}

其中:

参数 含义
index 别名指向的索引, 可以是任意的:* ¦ _all ¦ glob pattern ¦ name1, name2, …
name 别名的名称, 这是必须得参数。
routing 可选的关联别名的路由
filter 可选的关联别名的过滤器

你也可以使用复数的_aliases。

例子:

增加基于时间的别名:

PUT /logs_201305/_alias/2013

增加基于用户的别名:

先建立索引, 增加user_id字段的映射
PUT /users
{
    "mappings" : {
        "user" : {
            "properties" : {
                "user_id" : {"type" : "integer"}
            }
        }
    }
}

为指定的用户添加别名
PUT /users/_alias/user_12
{
    "routing" : "12",
    "filter" : {
        "term" : {
            "user_id" : 12
        }
    }
}

索引建立过程中的别名

别名还可以在创建索引的过程中指定:

PUT /logs_20162801
{
    "mappings" : {
        "type" : {
            "properties" : {
                "year" : {"type" : "integer"}
            }
        }
    },
    "aliases" : {
        "current_day" : {},
        "2016" : {
            "filter" : {
                "term" : {"year" : 2016 }
            }
        }
    }
}

删除别名

REST端点:http /{index}/_alias/{name}
其中:

参数 含义
index * ¦ _all ¦ glob pattern ¦ name1, name2, …
name * ¦ _all ¦ glob pattern ¦ name1, name2, …

或者可使用复数的别名:

DELETE /logs_20162801/_alias/current_day

获取存在的别名

获取索引别名的API支持通过别名名称和索引名称筛选。 该api重定向到主节点并获取所有请求的索引别名, 如果其可用。 这个api只序列化被发现的索引别名。

可用选项:

参数 含义
index 用于获取别名的索引名。部分名称支持通配符, 也可以使用逗号分隔的多个索引名。也可以使用索引的别名
alias 响应中返回的别名的名称。 和index选项相同, 这个选项支持通配符且可以使用逗号分隔的多个别名名称
ignore_unavailable 如果指定的索引名不存在, 设置为true会忽略这些索引。

REST端点:http /{index}/_alias/{alias}

例子

索引的所有别名:

GET /logs_20162801/_alias/*

响应:

{
 "logs_20162801" : {
   "aliases" : {
     "2016" : {
       "filter" : {
         "term" : {
           "year" : 2016
         }
       }
     }
   }
 }
}

所有名称是2016的别名:

GET /_alias/2016

响应:

{
  "logs_20162801" : {
    "aliases" : {
      "2016" : {
        "filter" : {
          "term" : {
            "year" : 2016
          }
        }
      }
    }
  }
}

所有名称由20开始的别名:

GET /_alias/20*

响应:

{
  "logs_20162801" : {
    "aliases" : {
      "2016" : {
        "filter" : {
          "term" : {
            "year" : 2016
          }
        }
      }
    }
  }
}

还有一个获取索引别名api的头部变体, 以检查是否存在索引别名。 索引别名和获取索引别名有着相同的选项。 例如:

HEAD /_alias/2016
HEAD /_alias/20*
HEAD /logs_20162801/_alias/*
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • 删除索引 用以下的请求来 删除索引: 对一些人来说,能够用单个命令来删除所有数据可能会导致可怕的后果。如果你想要避...
    techhow阅读 1,076评论 0 1
  • 支出:5 晚上停水,明天办公室停电,停电干嘛上班嘛!电脑不能用,大家坐在办公室干瞪眼嘛! 梅雨天要来了,抽湿器用起来哦!
    没错我就是那个帅小伙阅读 171评论 1 0
  • 2017年11月15日追记: 11月11日在校长信箱发了一份《学生关于兰州大学榆中校区应急疏散等安全问题的几个关心...
    魔法密林港阅读 2,166评论 9 5