Elasticsearch索引别名的介绍和操作

12 篇文章 0 订阅
9 篇文章 2 订阅

ES版本 :1.4.1

  elasticsearch中的API可以接受一个对应于某个索引的索引名,也可以接受多个索引。索引别名API允许使用一个名字来作为一个索引的别名,所有的API会将别名转化成最终的索引名。一个也可以被映射到多于一个的索引上,当指定这个别名的时候,别名将会自动地扩展到别名的所有的索引上。一个别名也可以与一个过滤器建立关联,这个过滤器在搜索和路由值的时候自动被应用。

    
    这里有个例子,将别名alias1余索引test1建立关联:
    
    curl -XPOST 'http://localhost:9200/_aliases' -d '
    {
        "actions": [
            {"add": {"index": "test1", "alias": "alias1"}}
        ]
    }'
    
    一个别名也可以被移除,比如:
    
    curl -XPOST 'http://localhost:9200/_aliases' -d '
    {
        "actions": [
            {"remove": {"index": "test1", "alias": "alias1"}}
        ]
    }'
    
    重命名一个别名就是一个简单的remove然后add的操作,也是使用相同的API。这个操作是原子的,无需担心这个别名未能指向一个索引的简短时间:
    
    curl -XPOST 'http://localhost:9200/_aliases' -d '
    {
        "actions": [
            {"remove": {"index": "test1", "alias": "alias1"}},
            {"add": {"index":"test1", "alias": "alias2"}}
        ]
    }'
    
    将一个别名同多个的索引关联起来就是简单地几个add操作:
    
    curl -XPOST 'http://localhost:9200/_aliases' -d '
    {
        "actions": [
            {"add": {"index": "test1", "alias":"alias1"}},
            {"add": {"index": "test2", "alias":"alias1"}}
        ]
    }'
    
    向一个指向多个索引的别名去索引数据会引发一个错误。
    
    
    过滤的别名
    
    带有过滤器的别名提供了一种创建一个索引的不通的视图的简单方式。这个过滤器可以通过使用查询DSL来定义,并且能够通过使用这个别名将其应用于所有的搜索,计数,按照查询的删除操作,和更多类似的操作。
    
    1.4.0 beta1加入
    在别名过滤器中引用的字段必须在别名对应的index/indices上的mappings中存在。
    
    要创建一个过滤别名,首先我们需要确保这个字段已经在mapping中存在,如果索引已经存在,可以通过如下的方式将这个字段添加到mapping中:
    curl -XPUT 'http://localhost:9200/test1/_mappings/type1' -d '
    {
        "properties": {
            "user": {
                "type": "string",
                "index": "not_analyzed"
            }
        }
    }'
    
    现在我们可以使用user上的一个过滤器来创建一个别名了:
    curl -XPOST 'http://localhost:9200/_aliases' -d '
    {
        "actions": [
            {"add": {"index": "test1", "alias": "alias2", "filter": {"term": {"user": "kimchy"}}}}
        ]
    }'
    
    
    路由
    
    也可以将路由值与别名关联起来。这个特征可以与过滤别名结合使用以避免不必要的分片操作。
    
    下面的命令创建了一个新的别名alias1,这个别名指向索引test。alias1创建之后,所有通过这个别名的操作会自动的修改为使用值3来路由:
    curl -XPOST 'localhost:9200/_aliases' -d '
    {
        "actions": [
            {"add": {"index": "test", "alias": "alias3", "routing": "3"}}
        ]
    }'
    
    也可以为搜索和索引操作指定不通的路由值:
    
    curl -XPOST 'localhost:9200/_aliases' -d '
    {
        "actions": [
            {"add": {"index": "test", "alias": "alias3", "search_routing": "1,3", "index_routing":"3"}}
        ]
    }'
    
    如上的例子所示,搜索路由可能包含多个由都好分割的值。索引的路由只可以包含单个的值。
    
    如果一个使用路由别名的操作也有一个路由参数,将会使用别名路由和参数中指定的路由的交集。比如,如下的命令将会使用3作为路由值:
    curl -XGET 'http://localhost:9200/alias3/_search?q=user:kimchy&routing=3,4'
    
    增加单个的别名
    一个别名可以通过端点来添加。
    
    PUT /{index}/_alias/{name}
    
    其中
    index是这个别名所引用的索引。可以是空|*|_all|glob pattern|name1,name2,...
    name是别名的名字。这是一个必填项
    routing是同一个别名相关联的的路由,是可选的
    filter是同一个别名相关联的过滤器,是可选的
    
    你也可以使用个复数形式的_aliases。
    
    例子:
        添加一个基于时间的别名:
        curl -XPUT 'localhost:9200/logs_201305/_alias/2013'
        
        添加要给用户别名:
        首先要先创建这个索引,并且为user_id添加一个mapping:
        curl -XPUT 'localhost:9200/users' -d '{
            "mappings" : {
                "user" : {
                    "properties" : {
                        "user_id" : {"type" : "integer"}
                    }
                }
            }
        }'
        
        为某个用户添加一个别名:
        curl -XPOST 'localhost:9200/users/type1?routing=12' -d '
        {
            "user_id": 12,
            "name": "HelloKitty12num"
        }'
        
    索引创建时的别名
    
    别名也可以在索引创建的时候同时指定:
    curl -XPUT localhost:9200/logs_20142801 -d '{
        "mappings" : {
            "type" : {
                "properties" : {
                    "year" : {"type" : "integer"}
                }
            }
        },
        "aliases" : {
            "current_day" : {},
            "2014" : {
                "filter" : {
                    "term" : {"year" : 2014 }
                }
            }
        }
    }'
    
    删除别名
    
    rest端点是/{index}/_alias/{name}
    其中
    index: * | _all | glob pattern | name1, name2, …
    name: * | _all | glob pattern | name1, name2, …
    
    你也可以使用复数的_aliases。例子
    curl -XDELETE 'localhost:9200/users/_alias/user_12'
    
    获取已经存在的别名
    获取索引别名的API允许你通过过滤别名名称和索引名称。这个API会转到master并获取到请求的索引别名,如果可用的话。这个API只串行化找到的索引别名。
    
    可能的选项
    
    index 要获取别名的索引的名称。支持通配符,也支持通过使用逗号来指定的多个索引名。同时也可以是使用对应于一个索引的别名名称。
    alias 要返回的别名名称。类似于index选项,这个选项支持通配符和通过逗号分隔来指定多个别名名称。
    ignore_unavailable 如果一个索引名不存在怎么办。如果设置成true,这些索引会被忽略。
    
    rest端点是:/{index}/_alias/{alias}
    
    1.4.0.beta1加入
    这个API总会包含一个aliases部分,即使没有任何的别名。先前的版本不会返回aliaes部分。
    
    警告:对于未来版本的Elasticsearch,如果一个请求的索引不存在,默认的多索引选项将会出错。这样这个API就和其它的索引GET API看齐。
    
    例子:
        获取users索引的所有的别名:
        curl -XGET 'localhost:9200/users/_alias/*'
        
        应答:
        {
          "users" : {
            "aliases" : {
              "user_12" : {
                "filter" : {
                  "term" : {
                    "user_id" : 12
                  }
                },
                "index_routing" : "12",
                "search_routing" : "12"
              }
            }
          }
        }
        
        获取任意索引中,名为alias1的别名:
        curl -XGET 'localhost:9200/_alias/alias1?pretty' 
        
        应答:
        {
          "test2" : {
            "aliases" : {
              "alias1" : { }
            }
          },
          "test1" : {
            "aliases" : {
              "alias1" : { }
            }
          }
        }
        
        获取任意索引中的,以alias开头的所有的别名:
        curl -XGET 'localhost:9200/_alias/alias*?pretty'
        
        应答:
        {
          "test2" : {
            "aliases" : {
              "alias1" : { }
            }
          },
          "test1" : {
            "aliases" : {
              "alias2" : {
                "filter" : {
                  "term" : {
                    "user" : "kimchy"
                  }
                }
              },
              "alias1" : { }
            }
          },
          "test" : {
            "aliases" : {
              "alias3" : {
                "index_routing" : "3",
                "search_routing" : "3"
              }
            }
          }
        }
        
        也有获取索引别名API的HEAD变体,用来检测一个索引别名是否存在。它和获取索引API支持的索引相同。不过我的测试没有通过,故略过。
        
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言 第1章 Elasticsearch入门 1 1.1 Elasticsearch是什么 1 1.1.1 Elasticsearch的历史 2 1.1.2 相关产品 3 1.2 全文搜索 3 1.2.1 Lucene介绍 4 1.2.2 Lucene倒排索引 4 1.3 基础知识 6 1.3.1 Elasticsearch术语及概念 6 1.3.2 JSON介绍 10 1.4 安装配置 12 1.4.1 安装Java 12 1.4.2 安装Elasticsearch 12 1.4.3 配置 13 1.4.4 运行 15 1.4.5 停止 17 1.4.6 作为服务 17 1.4.7 版本升级 19 1.5 对外接口 21 1.5.1 API约定 22 1.5 .2 REST介绍 25 1.5.3 Head插件安装 26 1.5.4 创建库 27 1.5.5 插入数据 28 1.5.6 修改文档 28 1.5.7 查询文档 29 1.5.8 删除文档 29 1.5.9 删除库 30 1.6 Java接口 30 1.6.1 Java接口说明 30 1.6.2 创建索引文档 33 1.6.3 增加文档 34 1.6.4 修改文档 35 1.6.5 查询文档 35 1.6.6 删除文档 35 1.7 小结 36 第2章 索引 37 2.1 索引管理 37 2.1.1 创建索引 37 2.1.2 删除索引 39 2.1.3 获取索引 39 2.1.4 打开/关闭索引 40 2.2 索引映射管理 41 2.2.1 增加映射 41 2.2.2 获取映射 44 2.2.3 获取字段映射 45 2.2.4 判断类型是否存在 46 2.3 索引别名 46 2.4 索引配置 51 2.4.1 更新索引配置 51 2.4.2 获取配置 52 2.4.3 索引分析 52 2.4.4 索引模板 54 2.4.5 复制配置 55 2.4.6 重建索引 56 2.5 索引监控 60 2.5.1 索引统计 60 2.5.2 索引分片 62 2.5.3 索引恢复 63 2.5.4 索引分片存储 64 2.6 状态管理 64 2.6.1 清除缓存 64 2.6.2 索引刷新 64 2.6.3 冲洗 65 2.6.4 合并索引 65 2.7 文档管理 66 2.7.1 增加文档 66 2.7.2 更新删除文档 69 2.7.3 查询文档 73 2.7.4 多文档操作 76 2.7.5 索引词频率 80 2.7.6 查询更新接口 83 2.8 小结 87 第3章 映射 88 3.1 概念 88 3.2 字段数据类型 90 3.2.1 核心数据类型 91 3.2.2 复杂数据类型 96 3.2.3 地理数据类型 100 3.2.4 专门数据类型 106 3.3 元字段 108 3.3.1 _all字段 109 3.3.2 _field_names字段 109 3.3.3 _id字段 110 3.3.4 _index字段 110 3.3.5 _meta字段 111 3.3.6 _parent字段 111 3.3.7 _routing字段 112 3.3.8 _source字段 114 3.3.9 _type字段 115 3.3.10 _uid字段 115 3.4 映射参数 116 3.4.1 analyzer参数 116 3.4.2 boost参数 118 3.4.3 coerce参数 119 3.4.4 copy_to参数 120 3.4.5 doc_values参数 121 3.4.6 dynamic参数 122 3.4.7 enabled参数 122 3.4.8 fielddata参数 123 3.4.9 format参数 126 3.4.10 geohash参数 128 3.4.11 geohash_precision参数 129 3.4.12 geohash_prefix参数 130 3.4.13 ignore_above参数 131 3.4.14 ignore_malformed参数 131 3.4.15 include_in_all参数 132 3.4.16 index参数 133 3.4.17 index_options参数 133 3.4.18 lat_lon参数 134 3.4.19 fields参数 135 3.4.20 norms参数 136 3.4.21 null_value参数 137 3.4.22 position_increment_gap参数 137 3.4.23 precision_step参数 138 3.4.24 properties参数 138 3.4.25 search_analyzer参数 139 3.4.26 similarity参数 140 3.4.27 store参数 141 3.4.28 term_vector参数 141 3.5 动态映射 142 3.5.1 概念 142 3.5.2 _default_映射 143 3.5.3 动态字段映射 143 3.5.4 动态模板 145 3.5.5 重写默认模板 148 3.6 小结 148 第4章 搜索 149 4.1 深入搜索 149 4.1.1 搜索方式 149 4.1.2 重新评分 153 4.1.3 滚动查询请求 155 4.1.4 隐藏内容查询 158 4.1.5 搜索相关函数 161 4.1.6 搜索模板 164 4.2 查询DSL 167 4.2.1 查询和过滤的区别 167 4.2.2 全文搜索 168 4.2.3 字段查询 179 4.2.4 复合查询 183 4.2.5 连接查询 188 4.2.6 地理查询 190 4.2.7 跨度查询 197 4.2.8 高亮显示 200 4.3 简化查询 203 4.4 小结 206 第5章 聚合 207 5.1 聚合的分类 207 5.2 度量聚合 209 5.2.1 平均值聚合 209 5.2.2 基数聚合 211 5.2.3 最大值聚合 213 5.2.4 最小值聚合 214 5.2.5 和聚合 214 5.2.6 值计数聚合 215 5.2.7 统计聚合 215 5.2.8 百分比聚合 215 5.2.9 百分比分级聚合 216 5.2.10 最高命中排行聚合 217 5.2.11 脚本度量聚合 217 5.2.12 地理边界聚合 221 5.2.13 地理重心聚合 222 5.3 分组聚合 223 5.3.1 子聚合 224 5.3.2 直方图聚合 226 5.3.3 日期直方图聚合 230 5.3.4 时间范围聚合 233 5.3.5 范围聚合 234 5.3.6 过滤聚合 235 5.3.7 多重过滤聚合 236 5.3.8 空值聚合 238 5.3.9 嵌套聚合 239 5.3.10 采样聚合 240 5.3.11 重要索引词聚合 242 5.3.12 索引词聚合 245 5.3.13 总体聚合 251 5.3.14 地理点距离聚合 251 5.3.15 地理散列网格聚合 253 5.3.16 IPv4范围聚合 255 5.4 管道聚合 257 5.4.1 平均分组聚合 259 5.4.2 移动平均聚合 261 5.4.3 总和分组聚合 262 5.4.4 总和累计聚合 262 5.4.5 最大分组聚合 264 5.4.6 最小分组聚合 265 5.4.7 统计分组聚合 266 5.4.8 百分位分组聚合 268 5.4.9 差值聚合 269 5.4.10 分组脚本聚合 273 5.4.11 串行差分聚合 275 5.4.12 分组选择器聚合 276 5.5 小结 277 第6章 集群管理 278 6.1 集群节点监控 278 6.1.1 集群健康值 278 6.1.2 集群状态 279 6.1.3 集群统计 280 6.1.4 集群任务管理 280 6.1.5 待定集群任务 281 6.1.6 节点信息 281 6.1.7 节点统计 282 6.2 集群分片迁移 283 6.3 集群节点配置 284 6.3.1 主节点 285 6.3.2 数据节点 286 6.3.3 客户端节点 286 6.3.4 部落节点 287 6.4 节点发现 287 6.4.1 主节点选举 288 6.4.2 故障检测 288 6.5 集群平衡配置 289 6.5.1 分片分配设置 289 6.5.2 基于磁盘的配置 290 6.5.3 分片智能分配 291 6.5.4 分片配置过滤 292 6.5.5 其他集群配置 293 6.6 小结 293 第7章 索引分词器 294 7.1 分词器的概念 294 7.2 中文分词器 298 7.3 插件 300 7.3.1 插件管理 301 7.3.2 插件安装 301 7.3.3 插件清单 302 7.4 小结 304 第8章 高级配置 305 8.1 网络相关配置 305 8.1.1 本地网关配置 305 8.1.2 HTTP配置 306 8.1.3 网络配置 307 8.1.4 传输配置 308 8.2 脚本配置 310 8.2.1 脚本使用 311 8.2.2 脚本配置 313 8.3 快照和恢复配置 318 8.4 线程池配置 324 8.5 索引配置 326 8.5.1 缓存配置 326 8.5.2 索引碎片分配 329 8.5.3 合并 332 8.5.4 相似模块 332 8.5.5 响应慢日志监控 333 8.5.6 存储 335 8.5.7 事务日志 336 8.6 小结 337 第9章 告警、监控和权限管理 338 9.1 告警 338 9.1.1 安装 338 9.1.2 结构 339 9.1.3 示例 352 9.1.4 告警输出配置 354 9.1.5 告警管理 355 9.2 监控 356 9.2.1 安装 356 9.2.2 配置 357 9.3 权限管理 360 9.3.1 工作原理 361 9.3.2 用户认证 361 9.3.3 角色管理 366 9.3.4 综合示例 368 9.4 小结 369 第10章 ELK应用 370 10.1 Logstash 370 10.1.1 配置 371 10.1.2 插件管理 374 10.2 Kibana配置 377 10.2.1 Discover 379 10.2.2 Visualize 381 10.2.3 Dashboard 383 10.2.4 Settings 386 10.3 综合示例 387 10.4 小结 390 附录 Elasticsearch 5.0的特性与改进 391
近200节课,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程内容介绍 (1)核心知识篇 课程特点 (1)使用最新Elasticsearch 5.2版本讲解,市面上的书籍和视频几乎都停留在2.x版本 (2)深入浅出ES核心工作原理,全部手工画图讲解,完全不同于市面上已有视频的PPT讲解 (3)涵盖Elasticsearch所有核心知识点,系统化,体系完整详细,有一定深度,包括完整Java开发示范 (3-1)全面的知识体系,包括了工作原理,文档管理,索引管理,搜索,聚合分析,分词,数据建模,Java API等知识 (3-2)知识足够深入和细节,完全秒杀市面上已有的书籍和视频,比如index segment merge原理,乐观锁并发控制,索引别名与零停机,相关度评分算法与定制,近似聚合算法,doc values与fielddata机制原理,父子关系数据建模,Java API执行scroll search等各种复杂操作,等等 (4)全程每讲必练,大量的案例实战和上机实验,实战出真知,实战中学知识,没有任何一讲是干讲ppt的 (5)包含一个实战项目,运用学到的知识,开发一个小型门户网站的搜索引擎和数据分析系统,运用ES几乎所有的核心知识,不像市面上的demo项目 (6)课程学完之后,学员可以掌握es所有核心知识点,理解es核心原理,而且能够熟练动手操作所有学到的知识和功能,并且能够掌握ES集群的基本部署,并且基于Java开发一个适用于中小型企业的搜索引擎以及数据分析系统,达到学完即可上手到中小型项目中使用的程度 (2)高手进阶篇 课程特点 (1)使用最新Elasticsearch 5.2版本讲解 (2)包含市面上几乎没有的所有Elasticsearch高级知识点:包含地理位置搜索与聚合分析,term vector,suggester search,搜索模板定制,query执行剖析,数十种最全面的聚合分析,span query,shard分配定制,es插件开发,等等,高级的知识点,这些知识点,市面上已有的书籍或视频几乎都没有 (3)全程每讲必练,大量的案例实战和上机实验 (4)包含一个复杂实战项目,运用学到的知识,开发一个复杂的基于地理位置的智能餐厅app的搜索引擎和数据分析系统,运用ES从核心篇到高级篇的所有高阶知识点 (5)课程学完之后,学员可以掌握es从核心到高阶的所有知识点,掌握完整的有深度的es知识体系,同时能够动手操作所有的知识点和功能,最后通过项目实战,能够在中小型公司中,基于Java开发一个可以基于地理位置进行搜索的高级搜索引擎,以及使用复杂聚合操作进行分析的高级实时数据分析系统 (3)大型集群运维优化篇 课程特点 (1)最全面的Elasticsearch运维、管理、调优、故障处理的知识体系:企业级监控体系的搭建,企业级集群部署,集群日常管理策略,集群版本升级方案,集群基准压测方案,集群数据的备份和恢复,系统核心配置参数,性能调优方案,故障处理方案 (2)全程每讲必练,大量上机实验,所有的运维、管理、部署、优化,全部上机实验 (3)从零开始,逐步搭建出一个大型可扩展、高性能、监控体系完善、管理体系健全的分布式集群 (4)学完课程之后,学员除了可以开发复杂的es搜索/分析系统之外,还可以掌握在任何一个公司里,从零开始搭建一个分布式的大型es集群,并制定完善的监控,运维,管理,优化等方案 (4)大型项目架构篇 课程特点 (1)涵盖Elasticsearch目前最核心的两个应用领域,垂直搜索引擎,实时数据分析 (2)开发出2个企业级的大型复杂项目,是完全真实的大型企业项目,电商搜索引擎,电商实时数据分析平台 (2-1)大型电商搜索引擎,包括了真正复杂的大型企业,大型项目的商业级搜索引擎架构,包括了检索、数据更新、排序、分词、query分析等各个核心模块,同时架构上实现了复杂的缓存机制,热启动机制,防雪崩机制,自动降级高可用机制,等等 (2-2)大型电商实时数据分析平台,完整、复杂而且大型的电商数据分析,包括了完善的数据分析指标体系(运营指标,流量指标,销售转化指标,客户价值指标,商品指标,营销指标,风险控制指标,市场竞争指标),一站式构建出复杂的,企业级的,电商领域数据分析平台 (2-3)之所以要单独拉出一篇做大型项目实战,是因为,之前几篇讲的项目,多是架构较为简单,业务也不复杂的项目,主要适用于中小型公司,而且那两个项目主要是集中在运用ES的技术本身来开发出需要的功能来(搜索/分析)。这一篇讲解的项目,重点是采用大公司的大型复杂项目作为背景,让同学可以掌握基于ES技术的大型项目架构能力,达到架构师的水平。比如说大型电商搜

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值