ElasticSearch相关概念

suaxi
2021-05-12 / 0 评论 / 135 阅读 / 正在检测是否收录...

es与关系型数据库对比

Relational DBElastic Search
数据库(database)索引(indices)
表(table)types(类型)(es8.0弃用)
行(rows)documents(文档)
字段(columns)fields

es(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档又包含多个字段(列)。


物理设计:

es在后台把每个索引划分成多个分片,每份分片可以在集群中的不同服务器间迁移

逻辑设计:

一个索引类型中包含多个文档,例如:文档1、文档2,当要搜索一篇文档时,大致流程为:索引 ---> 类型 ---> 文档ID(ID不必是整数,实际上是一个字符串)


文档

es是面向文档的,也就是说索引和搜索数据的最小单位是文档,其包含有几个重要属性:

  • 自我包含,一篇文档同时包含字段和对应的值,即key:value
  • 层次型的:一个文档中包含自文档(json对象,fastjson进行自动转换)
  • 灵活的结构:文档不依赖预先定义的模式,在关系型数据库中,要提前定义字段才能使用,而在es中,可以忽略一个字段或动态的添加一个新的字段

在es中,每个字段的类型非常重要,它会保存字段和类型之间的映射及其他的设置,这种映射具体到每个映射的每种类型,这也是为什么在es中,类型有时候也称为映射类型


类型

类型是文档的逻辑容器(就像关系型数据库,表格是行的容器),类型中对于字段的定义称为映射,比如name映射为字符串类型。

先定义好字段,再使用


索引

es中的索引就是数据库,索引是映射类型的容器,是一个非常大的文档集合,存储映射类型和其他设置,再被存放到各个分片上

物理设计:节点和分片如何工作

一个集群至少有一个节点,而一个节点就是一个es进程,创建索引时,默认5个分片(primary shard,主分片),每一个主分片会有一个副本(replica shard,复制分片)

4.2索引图解.png

以上图3个节点的集群为例,可以看出主分片和对应的复制分片都不会在同一个节点内,可以避免级联故障。实际上,一个分片是一个Lucence索引,一个包含倒排索引的文件目录,倒排索引使得es可以在不扫描全部文档的情况下,检索出需要的内容。


倒排索引

es使用的是倒排索引结构,采用Lucence倒排索引作为底层。这种结构适用于快速全文搜索,一个索引由文档中所有不同的列表构成,对于每一个词,都有一个包含它的文档列表。

例1:现在有两个文档,每个文档包含以下内容:

# 文档1
Study every day,good good up to forever

# 文档2
To forever,study every day, good good up

为了创建倒排索引,先要将每个文档拆分成独立的词(或称为词条、tokens),然后创建一个包含所有不重复的词条的排序列表

文档1文档2
Study×
To×
every
forever
day
study×
good
every
to×
up

现在试图搜索to forever,只需要查看包含每个词条的文档

文档1文档2
to×
forever
total21

两个文档都匹配,但第一个文档比第二个文档匹配度更高,没有别的条件时,返回这两个包含关键字的文档


例2:通过博客标签来搜索博客文章

例2所用图片.png

现搜索包含python标签的文章,相较于搜索原始数据,现只需要搜索标签这一栏,即可更快的获取文章id

0

评论 (0)

取消