zoukankan      html  css  js  c++  java
  • Elasticsearch 之索引别名 alias

    转载自:https://my.oschina.net/u/204498/blog/529960

    一、

    Elasticsearch的别名,就类似数据库的视图。

    创建别名:

    我们为索引my_index创建一个别名my_index_alias,这样我们对my_index_alias的操作就像对my_index的操作一样

    复制代码
    POST /_aliases
    {
      "actions": [
        {
          "add": {
            "index": "my_index",
            "alias": "my_index_alias"
          }
        }
      ]
    }
    复制代码

    别名不仅仅可以关联一个索引,它能聚合多个索引

    我们为索引my_index_1 和 my_index_2 创建一个别名my_index_alias,这样对my_index_alias的操作(仅限读操作),会操作my_index_1和my_index_2,类似于聚合了my_index_1和my_index_2.我们是不能对my_index_alias进行写操作,当有多个索引时alias,不能区分到底操作哪一个

    复制代码
    POST /_aliases
    {
      "actions": [
        {
          "add": {
            "index": "my_index_1",
            "alias": "my_index_alias"
          }
        },
        {
          "add": {
            "index": "my_index_2",
            "alias": "my_index_alias"
          }
        }
      ]
    }
    
    GET /my_index_alias/_search
    {
    }
    复制代码
    1
    <code class="hljs bash"> </code>

    创建filtered的别名:

    例如对于同一个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"
          }
        }
      ]
    }
    
    GET /my_index__teamA_alias/_search 只能看到teamA的数据
    GET /my_index__teamB_alias/_search 只能看到teamB的数据
    GET /my_index__team_alias/_search 既能看到teamA的,也能看到teamB的数据
    复制代码
    1
    <code class="hljs bash"> </code>

    二、情景

    情景1:用Logstash采集当前所有nginx的日志,放入ES,索引名叫nginx-YYYY.MM.DD

    后来又增加了apache的日志,希望能放到同一个索引中,统一叫做web-YYYY.MM.DD

    我们只要把logstash的配置更改下,然后重启,这样数据就会写入到新的索引下,但是同一天的索引就会被写入2个索引中,Kibana中就不好配置了。

    解决方案:

    1.今天是2015-11-13.我们为nginx-2015.11.13创建一个alias叫做web-2015.07.28,之前所有的nginx日志也这样

    2.kibana中把dashboard的配置索引名改为web-YYYY.MM.DD

    3.将logstash里面的elasticsearch的配置改为web-YYYY.MM.DD,重启

    情景2:用Logstash采集当前所有nginx的日志,放入ES,索引名叫nginx-YYYY.MM.DD

    某天2015-11-13希望按照月来建立索引,索引名改为nginx-YYYY.MM

    注意:像情景1中,我们建立一个nginx-2015.11的alias执行本月的其他索引,是不行的。因为一个alias指向多个索引后,写这个alias时,ES不可能知道写入到那个真正的索引中。

    解决方案1:

    1.新建索引nginx-2015.11 以及它的nginx-2015.11.01,nginx-2015.11.02,...,nginx-2015.11.30等

    2.等到了第二天,将logstash的配置改为nginx-YYYY.MM,重启

    3.如果索引只保留10天,在10天候的某天,将kibana的配置改为nginx-YYYY.MM

    缺点:第二步和第三步需要手工,可以写crontab定时任务

    我们不希望用户(Kibaba的使用者)感觉到任何变化,更不能让使用者感觉到数据的丢失。

    转载于:https://www.cnblogs.com/rainwang/p/6062650.html

  • 相关阅读:
    安装一些好用的工具
    转:通过快键强制关闭 Ubuntu 上无响应的程序
    同步cm10.1源码时出现的一些错误的解决办法。
    repo sync的介绍翻译
    配置grub解决ubuntu12.04不能保存亮度和调节的问题
    给fcitx加上云拼音库
    自己安装配置ubuntu12.04过程(内容丰富)
    关于repo sync -j*的含义的猜测
    同步cm10.1的时候发生同步错误不能找到github上的文件
    Element-ui tree组件自定义节点使用方法
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/14449025.html
Copyright © 2011-2022 走看看