元数据,用于标注文档的相关信息
{
"_index" : "movies",
"_type" : "doc",
"_id" : "1",
"_score" : 14.69302,
"_source" : {
"year" : 1995,
"@version" : "1",
"genre":[
"Adventure",
"Animation",
"Children",
"Comedy",
"Fantasy"
],
"id":"1",
"title":"Toy Story"
}
}
| 关系型数据库 | ES |
|---|---|
| Table | Index |
| Row | Document |
| Column | Field |
| Schema | Mapping |
| SQL | DSL |
ES支持分布式部署,其分布式架构支持存储的水平扩容,并且提高了系统的可用性,部分节点停止服务,整个集群的服务不受影响。
ES的分布式架构,不通的集群通过不通的名字来区分,默认集群的名称为elasticsearch,通过配置文件的修改或者直接在启动命令中指定 -E cluster.name=mymain进行设定,一个集群支持一个到多个节点。
节点就是一个ES的实例
每个节点都有一个名字,通过配置文件配置或者启动的时候通过-E node.name=node1指定
每个节点在启动以后都会分配一个UUID,保存到data目录下
Master节点的概念
Data节点
Coordinating节点
负责接受Client的请求,将请求分发到合适的节点,最终把结果汇集到一起
每个节点都默认起到Coodinating节点的职责
问题:当一个机器上启动多个实例的时候,谁是Master节点,谁是Data节点,谁是Coordinating节点,谁提供的9200端口
Ingest节点
主要用于对数据进行预处理。Ingest节点类似于Logstash中的Filter,可以对数据进行解析、转换和过滤等操作。当数据到达Ingest节点时,它会先对数据进行预处理,然后再将数据发送到Elasticsearch的Data节点进行索引和存储。
Hot&Warm节点
Machine Learning 节点
Tribe节点
开发环境中一个节点可以承担多种角色
生产环境中,应该设置单一的角色
| 节点类型 | 配置参数 | 默认值 |
|---|---|---|
| master eligible | node.master | true |
| data | node.data | true |
| hot&warm | node.attr.box_type | 无 |
| ingest | node.ingest | true |
| coordinating only | 无 | 每个节点默认都是coordinating节点,设置其他类型全部为false |
| machine learning | node.ml | true |
在Elasticsearch中,分片(Shard)是数据的基本单位,每个索引在创建时都会被分成多个分片。这些分片是数据的容器,用于存储索引中的数据。每个分片实际上是一个独立的索引实例,包含了数据的一个完全独立的物理副本,这意味着每个分片都包含了数据的一个完整复制集。
分片的主要目的是为了在Elasticsearch集群中分发数据,以提供高可用性和负载均衡。通过将数据分散到不同的分片上,Elasticsearch可以在多个节点上并行处理数据,从而提高性能和可扩展性。每个分片都可以独立扩展,而不会影响其他分片的性能。此外,Elasticsearch还支持动态分片分配,这意味着可以自动将新的索引或文档分配到最合适的分片上。
在Elasticsearch中,分片可以跨多个节点分布,以提高数据的可用性和可扩展性。当集群扩容或缩小时,Elasticsearch会自动在节点间迁移分片,以使集群保持平衡。分片可以是主分片(primary shard)或者是复制分片(replica shard),主分片用于存储实际数据,而复制分片则是主分片的副本,用于提高数据的可靠性和可用性。
我们举例来说明分片的概念与作用:
在Elasticsearch中,分片的规划是非常重要的,因为它直接影响到集群的性能、扩展性和数据安全性。以下是一些建议,帮助你规划Elasticsearch中的分片:
在了解倒排索引之前我们先讲解一下什么是正排索引,正排索引就是根据ID查询具体的数据,可以类比于一本书的目录,我们可以快速的根据目录中的页码快速找到对应的内容,而假如现在我们有一个关键词,需要知道关键词所在页码,那么就需要一个关键词和页码的一个索引来帮助我们根据关键词找到对应的页码,这个索引就叫做倒排索引。
| 概念 | 图书 | 搜索引擎 |
|---|---|---|
| 正排索引 | 目录 | 文档ID到文档内容和单词的关联 |
| 倒排索引 | 索引页 | 单词到文档ID的关联 |
我们来举个正排索引和倒排索引的例子:
正排索引
| 文档ID | 文档内容 |
|---|---|
| 1 | Mastering ElasticSearch |
| 2 | ElasticSearch Server |
| 3 | ElasticSearch Client |
倒排索引
| 关键词 | 计数 | 文档ID:位置 |
|---|---|---|
| Mastering | 1 | 1:1 |
| ElasticSearch | 3 | 1:2,2:1,3:1 |
| Server | 1 | 2:2 |
| Client | 1 | 3:2 |
倒排索引的组成: