Elasticsearch基本概念

简介

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,但Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:

  • 分布式的实时文件存储,每个字段都被索引并可被搜索
  • 分布式的实时分析搜索引擎
  • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据

而且,所有的这些功能被集成到一个服务里面,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。
上手Elasticsearch非常容易。它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它开箱即用(安装即可使用),只需很少的学习既可在生产环境中使用。
Elasticsearch在Apache 2 license下许可使用,可以免费下载、使用和修改。

基本概念

集群(Cluster)

集群是由一个或多个节点(服务器)一起存储数据,并提供在所有节点联合索引和搜索功能的集合。一个集群是由唯一的一个名称(cluster.name)来确定,默认为elasticsearch,相同cluster.name的节点会组成一个集群;所以在使用过程中,同一网段的多个环境请确保cluster.name唯一,否则节点会加入到错误的集群当中;例如使用过程中开发环境和测试环境一般会在同一网段,在部署Elasticsearch集群时,集群名称必须唯一。

节点(Node)

节点是集群的组成部分,存储数据并参与数据的索引和搜索功能;在集群中,节点通过启动时默认随机生成的名称作为标识,如果不希望随机,你可以任意定义该节点名称;
节点通过配置的cluster.name发现并加入集群,启动多个相同cluster.name的节点,假设节点之间可以互相发现,则多个节点将自动组成一个集群;在一个单一的集群中,你可以增加多个节点,如果网络上没有其他启动的节点,则该节点将作为一个单节点集群。

索引(idnex)

索引是具有类似特征的文档的集合,例如客户数据、产品信息、订单信息等;索引是由一个名字标识(必须是全部小写),该名字用来进行索引、搜索、更新、删除操作指定操作那个索引。在一个集群中,可以根据需求定义多个索引。

类型(type)

在一个索引中,你可以指定多个类型;一个类型为具有一组共同的字段的文档中定义;例如博客平台,可以将所有数据存储在一个索引里面,用户信息、博客信息可以用不通的类型来区分。

文档(document)

文档是能够被索引的信息的基本单位;例如,您可以给一位客户建立一个文档、给产品建立一个文档、也可以给其它订单等建立文档;文档通过json格式存储;在索引/类型中可以存储多个文档。注意:虽然文档物理上存储在一个索引中,但实际上文档必需建立索引并分配给索引内的类型。

分片(shards)

索引可以存储大量数据,可以超过单个节点的硬件限制,例如,一个十亿文件的单个索引占用的磁盘空间1TB,可能不适合存储在单个节点的磁盘上,即使可以存储在单个节点上,也会导致搜索请求太慢。
为了解决上述问题,Elasticsearch将索引切分为多个分片,当你创建索引时,你可以指定分片数量,每个分片是独立并且全功能的,可以存储在集群中任何数据节点上;

需要分片的原因:
- 允许你水平分割/扩展您的内容量;
- 允许你分发和并行跨分片操作(可能在多个节点),从而提高性能/吞吐量;

分片在集群中的分布及搜索时文档的聚合返回完全由Elasticsearch管理,整个过程对用户透明;

副本(Replicas)

在一个Elasticsearch集群中,节点故障有可能随时发生,我们需要一个故障切换机制来防止切片/节点的不可用,为此,Elasticsearch通过复制一个或多个切片进行数据冗余,防止节点故障导致的数据丢失;

需要副本的原因:
- 保证了集群的高可用,为此,副本的存储均不会分配在同一个节点上;
- 可以提高搜索量/吞吐量,因为搜索可以并行操作所有副本;

总结

每个索引可以被切分成多个分片,每个索引也可以包含零个(没有副本)或多个副本,副本生成后,每个索引将有主分片(被复制的分片)和副本分片(主分片的拷贝),在索引创建时,可以指定主分片及副本的个数;副本个数在索引创建后可以随时修改,但主分片个数将不能修改;默认情况下,主分片为5个,副本为1个,在一个有两台节点的集群中,默认创建一个索引,该索引将包含5个主分片和5个副本分片,总计10个分片;如果集群为单个节点,那么所有的副本将都不可用;

注意:

每个Elasticsearch分片对应Lucene的index,一个Lucene的index所能包含的最大文档数,按照LUCENE-5843,文档数应小于2,147,483,519 (= Integer.MAX_VALUE - 128) ,可以使用_cat/shards接口进行切片大小监控。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值