发布于 2015-11-13 13:39:08 | 1080 次阅读 | 评论: 0 | 来源: PHPERZ

这里有新鲜出炉的ElasticSearch权威指南,程序狗速度看过来!

ElasticSearch 基于Lucene的搜索引擎

ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。 我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的。我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的。


一、

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
{
}

创建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:用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的使用者)感觉到任何变化,更不能让使用者感觉到数据的丢失。



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务