暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ES基础-01基本概念

小怂读书 2021-10-08
399

       ElasticSearch基于Lucene实现的高扩展、开源的全文检索和分析引擎,可以进行准实时的数据存储、搜索和分析,具有高度可扩展性、全文检索能力、准实时的数据响应能力,适合海量数据的存储、搜索和分析。


1、为什么需要ES?

      数据库也可以实现搜索功能,为什么需要ES?

      我们通常说的数据库(用的比较多的MySQL数据库)是关系型数据库,它是一种通过关系模型来组织数据的数据库,通过行和列来表述逻辑关系。数据库带有索引功能能够加快搜索的速度,也实现了诸如sum、avg等等的聚合函数可用于数据分析。

      数据库的数据检索功能更多的是一种“精确匹配”的查找,通过主键来进行目标数据的检索过程,这个过程我们通常称为“正向检索”。在某些场景下数据库的检索很乏力,例如我们想要模糊查找“小怂”相关的内容,如果使用数据库:

select * from tableName where content like "%小怂%" //这种方式还是一种精确匹配

      这个时候我们ES的主要特性“倒排索引”功能就显得很强大,可以通过对term建立倒排索引,查找term=“小怂”的文档数据。而且在数据量比较大的情况下(上T数据的情况下),使用MySQL的like方式查询严重消耗性能。


-- head查看es集群状况 --

2、ES的基本概念

  • 索引(index):存储数据的地方,可类比于数据库的概念

  • 类型(type):同一类型、业务场景的数据存放在一个type下,类比数据库中的表概念(注:type的概念在es6.0之后被废弃,es7中完全删除)

为什么删除type
在ES中同一索引下的数据,无论分为多少个type,每个type中的字段名都需要保证唯一,
这其实与数据库的表概念不一致。而且不建议将不同类型的数据存放在一个索引下,
这样一方面不同的数据查询性能之间会存在影响,另一方面不利于lucene对数据进行压缩处理。


es低版本升级高版本的过程,就需要对多type进行处理,常见的处理措施:
- 合并成单个type 
- 拆分成多个索引
  • 映射(mapping):索引数据的结构

  • 集群(cluster):多个ES节点组成ES集群,集群可以进行节点的扩展,提高存储数据的容量。每个集群都有一个标识称为集群名,集群下各节点根据相同的集群名,加入同一个集群。

  • 节点(node):节点实际上是一个ES实例。

一台机器上可以有多个节点(例如一个docker容器作为一个节点,每台物理机上可以创建多个docker容器)。
节点又可以分为主节点、数据节点、网关节点三类(我们是这么划分的),也可以一个节点即当主节点又当数据节点,即主数节点等等划分方式,节点的划分主要是更好的进行集群的管理。
  • 分片(shard):分片是存储数据的地方,是一个完整的Lucene索引。

  • 副本(replica):副本是主分片的冗余,是主分片数据的copy(主副分片数据同步)

写入主分片,副本分片同步数据。
副本作用:
容灾,主分片发生故障,es选择副本分片升级为主分片,保证写入数据可用。
提升查询效率,副本分片上的数据是主分片数据的copy,这样es在查询的过程中就可通过副本进行数据的获取


3、倒排索引

      对文档进行分词,将文档的内容形成一个个词项,并记录每个词项出现的文档编号,查询过程中通过词项查找归属的文档,这就是倒排索引。

      简单举例,下面是我们要存储文档的内容:

      ES经过分词后,会形成如下的倒排表:

      在查找过程中,term=他们,es可以快速得到这个词项存在id=3的文档中,然后进行文档内容的获取和返回。

文章转载自小怂读书,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论