丁公藤

注册

 

发新话题 回复该主题

Elasticsearch基础但非常有用 [复制链接]

1#
白癜风有看好的没 http://m.39.net/pf/a_4789108.html
0、题记

本文是系列文章第一篇。介绍Elasticsearch的一些非常基础但实战开发确非常有用的技术点。了解这些技术点会帮助你设计更易于维护的数据索引,预先知道PB级大数据索引实战中的坑,提升工作效率。

本文从别名分类、索引别名实践、索引别名的好处、索引别名常见问题及坑解读、字段别名实践一把五个方面进行详细解读。

1、别名分类

别名在Elasticsearch中有两种分类。

1.1索引别名

官方释义:索引别名可以指向一个或多个索引,并且可以在任何需要索引名称的API中使用。别名为我们提供了极大的灵活性。它们允许我们执行以下操作:

1)在正在运行的集群上的一个索引和另一个索引之间透明切换;

2)对多个索引进行分组组合(例如,lastthreemonths的索引别名:是过去3个月索引logstash,logstash,logstash_的组合);

3)在索引中的文档子集上创建“视图”(结合业务场景,会提升检索效率)。

通俗解释:索引别名类似:windows的快捷方式,linux的软链接,mysql的视图。

前提:Elasitcsearch创建索引后,索引名不允许改。很多业务场景下单一索引可能无法满足要求。

场景1:PB级别增量数据,借助rolloverapi实现,由基于日期的n个索引组成,显然,对外提供服务使用别名会很便捷。

场景2:试想,线上提供服务的某个索引出了问题,比如:某字段分词定义不准确,如何保证对外提供服务不停止(不更改业务代码)的前提下更换索引,显然,别名更合适。

注意:实际业务场景使用别名会很方便、灵活、快捷、业务松耦合!!

1.2字段别名

在ElasticsearchMapping定义的6.4+版本才有的字段类型。

通俗解释:

试想一下有一种业务场景。比如在实际的业务开发中:需要对Facebook、twitter行采集,采集入库的是两个业务团队。

他们对content,分别使用了两个字段。其中一个是,content。另外一个是cont。这时候存储到elasticsearch会有两个字段。

这样如果我们在检索、写业务代码的时候,是不是要写两个不同的字段来处理呢?如果有可能写成一个字段,代码方面就很避开业务耦合,就很方便了。

我认为这是字段别名的由来。

2、索引别名实践2.1假设没有别名,如何处理多索引检索?

方式一:多索引逗号分隔检索。

POSTvisitor_logs_,visitor_logs_/_search

方式二:通配符索引检索。

POSTvisitor_logs_*/_search

2.2有了别名后,操作变得简单

实战中,我们不需要知道操作的实际索引名称,我们可以透明地更改别名引用的索引而不会影响使用别名的用户。

步骤1:别名关联已有索引。

POST/_aliases?pretty

{

"actions":[

{

"add":{

"index":"visitor_logs_",

"alias":"visitor_logs"

}

},

{

"add":{

"index":"visitor_logs_",

"alias":"visitor_logs"

}

}

]

}

步骤2:使用别名检索

GET/visitor_logs/_search

3、索引别名的好处3.1大数据量的管理

场景:实战中,可能需要基于时间的数据保留策略(利用rollover机制实现),并从系统中删除旧数据。使用索引别名:

好处1:来简化从Elasticsearch中删除数据的过程。

好处2:在没有任何停机时间的情况下从Elasticsearch中删除最旧的数据,不会出现任何查询中断,也不会进行任何客户端更改。

基于时间索引的实现机制如下:

推荐阅读:

分享 转发
TOP
发新话题 回复该主题