概念
Elastic Stack 是一系列由 Elastic 公司开发的产品组件,能够安全可靠地获取任何来源、任何 格式的数据,然后实时地对数据进行搜索、分析和可视化。Elastic Stack 旧称 ELK Stack,主 要有 Elasticsearch,Logstash,Kibana,Beats 四种组件组成。
以下是相关使用场景
Cluseter:集群,
Elasticsearch 集群由一个或多个节点组成,可通过其集群名称进行标识。通常这个 Cluster 的名字是可以在 Elasticsearch 里的配置文件中设置的。
以下是一个集群布局
Node
单个 Elasticsearch 实例。根据 node 的作用,可以分为如下的几种:
- master-eligible:可以作为主 node。一旦成为主 node,它可以管理整个 cluster 的设置及 变化:创建,更新,删除 index;添加或删除 node;为 node 分配 shard
- data:数据 nodei
- ngest: 数据接入(比如 pipepline)
- machine learning (Gold/Platinum License)
一般来说,一个 node 可以具有上面的一种或几种功能。我们可以在命令行或者 Elasticsearch 的配置文件(elasticsearch.yml)来定义:
Document
elasticsearch是面向文档的,这意味着索引或者搜索的最小单元是文档,文档有些重要属性
- 独立,文档包含字段以及其值
- 分层
- 结构灵活
它一般采用JSON形式
Type
类型是文档的逻辑容器,类似于表是行的容器,每种类型的字段定义称为映射。在未来8.0版本中,type将会被彻底删除,默认情况下是_doc
Index
index是索引,是文档的集合。
每个index一个或者多个documents组成,并且这些 document可以分布于不同的shard之中。index类似于数据库中database概念
shard
由于elasticsearch是一个分布式搜索引擎,因此索引通常会拆分分布在多个节点上的称为分片的元素。当创建一个索引的是时候,可以指定想要的分片的数量,(shard)。
- 允许水平分割扩展内容容量
- 允许分片进行分布式并行操作,提高性能和吞吐量
有两种类型的分片,primary shard和Replica shard
- 每个文档都存储在一个 Primary shard。 索引文档时,它首先在 Primary shard 上编制索引,然后在此分片的所有副本上(replica)编制索引。索引可以包含一个或多个主分片。 此数字确定索引相对于索引数据大小的可伸缩性。 创建索引后,无法更改索引中的主分片数。
- Replica shard: 每个主分片可以具有零个或多个副本。
默认情况下,每个主分片都一有一个副本,但是可以在现有的索引上动态更改副本数,永远不会在与其主分片相同的节点上启动副本分片。
文档
程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property)的名字,值(value)可以是字符串、数字、布尔类型、另一个对象、值数组或者其他特殊类型,比如表示日期的字符串或者表示地理位置的对象。
元数据
一个文档不只有数据,还包含了元数据metadata,关于文档的信息,三个必须的元数据节点是:
- _index :文档存储的地方
- _type:文档代表的对象的类
- _id:文档的唯一标识
索引
文档通过index api被索引,让数据可以被存储和搜索。
以下是一些创建的文档查询
#PUT /{index}/{type}/{id}
#设置id
PUT /website/blog/123
#获取文档
GET /website/blog/123?pretty
#获取文档的一部分
GET /website/blog/123?_source=title,text
#更新
PUT /website/blog/123
{
"title": "My first blog entry",
"text": "I am starting to get the hang of this...",
"date": "2014/01/02"
}
#创建一个新文档POST /website/blog/
PUT /website/blog/123?op_type=create
{ ... }
PUT /website/blog/123/_create
{ ... }
#局部更新
POST /website/blog/1/_update
{
"doc" : {
"tags" : [ "testing" ],
"views": 0
}
}