Elasticsearch-基本概念
Index、Type、Document
1.index:索引是文档(Document)的容器,是一类文档的集合。
1)、索引(名词)
类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库(Database)
。索引由其名称(必须为全小写字符)进行标识。
2)、索引(动词)
保存一个文档到索引(名词)的过程
。这非常类似于SQL语句中的 INSERT关键词。如果该文档已存在时那就相当于数据库的UPDATE。
3)、倒排索引
关系型数据库通过增加一个B+树索引到指定的列上,以便提升数据检索速度。索引ElasticSearch 使用了一个叫做 倒排索引
的结构来达到相同的目的。
2.type:
在7.0开始,一个索引只能建一个Type为_doc,好像没有太多意义,所以就只能建一个了
3.Document:Index 里面单条的记录称为Document(文档),就是数据库里的数据了
集群、节点、分片、副本
1、集群
ElasticSearch集群实际上是一个分布式系统,它需要具备两个特性:
1)高可用性
a)服务可用性:允许有节点停止服务;
b)数据可用性:部分节点丢失,不会丢失数据;
2)可扩展性
随着请求量的不断提升,数据量的不断增长,系统可以将数据分布到其他节点,实现水平扩展;
一个集群中可以有一个或者多个节点;
集群健康值
green:所有主要分片和复制分片都可用
yellow:所有主要分片可用,但不是所有复制分片都可用
red:不是所有的主要分片都可用
2、节点(Node)
1)节点是什么?
a)节点是一个ElasticSearch的实例,其本质就是一个Java进程;
b)一台机器上可以运行多个ElasticSearch实例,但是建议在生产环境中一台机器上只运行一个ElasticSearch实例;
Node 是组成集群的一个单独的服务器,用于存储数据并提供集群的搜索和索引功能。与集群一样,节点也有一个唯一名字,默认在节点启动时会生成一个uuid作为节点名,
该名字也可以手动指定。单个集群可以由任意数量的节点组成。如果只启动了一个节点,则会形成一个单节点的集群。
3、分片
Primary Shard(主分片)
ES中的shard用来解决节点的容量上限问题,通过主分片,可以将数据分布到集群内的所有节点之上。
关于倒序索引:
id | name | age |
1 | zhang | 12 |
2 | li | 14 |
3 | wang | 12 |
这样的数据会建立一下几个索引
name:
term | posting list |
zhang | 1 |
li | 2 |
wang | 3 |
age:
term | posting list |
12 | [1,3] |
14 | 2 |
Posting List
Elasticsearch分别为每个field都建立了一个倒排索引,zhang, wang这些叫term,而[1,3]就是Posting List。存储了所有符合某个term的文档id。