Elasticsearch概念及理解

本文详细介绍了Elasticsearch与传统关系型数据库的对比,强调了Elasticsearch的文档导向性和倒排索引机制。在物理设计上,Elasticsearch的索引由分片组成,允许多个副本确保数据冗余。倒排索引使得全文搜索高效,每个词对应一个包含它的文档列表。此外,文章还探讨了类型、文档和索引的关系,以及如何通过这些概念进行搜索。
摘要由CSDN通过智能技术生成

elasticsearch是面向文档

关系型数据库和elasticsearch客观的对比: (其实并不能将elasticsearch看作是一个数据库)

Relational DBElasticsearch
数据库(database)索引(indices)
表(tables)types(慢慢会被弃用)
行(rows)documents
字段(columns)fields

elasticsearch(集群)中可以包含多个索引(数据库)

每个索引中可以包含多个类型(表)

每个类型下又包含多个文档(行)

每个文档中又包含多个字段(列)。

物理设计

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

一个人就是一个集群,默认的集群名称是elasticsearch

逻辑设计

当我们索引一篇文档时,可以通过这样的顺序找到它的索引: 索引 > 类型 > 文档ID 通过这个组合就能索引到每个具体的文档 注意:ID不必是整数,实际上是个字符串

文档

就是一条条数据。

user
1   张三  18          #这就是一个文档
2   李四  16
3   王五  21

索引和搜索数据的最小单位是文档,文档的重要属性:

自我包含,一篇文档中包含字段和对应值,key:value ==> 就是一个json对象

可以是分层次型的,一个文档中包含自文档,复杂的实体就是这样来的

类型

类型是文档的逻辑容器,新增一个字段的时候,es会自动的将新加入字段加入映射。但是es自动加入的映射也有可能不正确。eg:name => String 但是es给name加入的映射是text......

索引

索引是映射类型的容器。可以理解为一个数据库。

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

创建索引时,会定义分片的数量和副本数。(副本数是每个主分片会有一个副本,复制分片)

一个集群最少有一个节点,一个节点就是一个es进程,

上图是有3个节点的集群,可以看到主分片(p0,p1,p2,p3,p4)和对应的复制分片Replica shard(R0,R1,R2,R3,R4)都不会在同一个节点内。

默认创建索引会有五个分片(p0,p1,p2,p3,p4),一个副本-每个主分片对应的一个副本(R0,R1,R2,R3,R4)

当节点3出现问题时,也不至于把数据丢失,因为p1的复制分片在节点2中,p4在节点1中。R2本来就是复制分片。

倒排索引

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

eg:
Study every day,good good up to forever #文档1中包含的内容
To forever,study every day,good good up #文档2中包含的内容

为了创建倒排索引.我们首先要将每个文档拆分独立的词(或称为词条或者tokens),然后创建一个包含所有不重复的词条的排序列表,然后列出每个词条出现在哪个文档:

termdoc_1doc_2
Study×
To×
every
forever
day
study×
good
to×
up

例如现在搜索 to forever

termdoc_1doc_2
to×
forever
total(权重)21

两个文档都匹配 权重大于0 ,但是第一个文档比第二个文档的匹配程度更高 权重更高 。如果没有别的条件的话,现在,这两个包含关键字的文档都将被返回。

通过博客标签来搜索博客文章,那么倒排索引列表就是这样的一个结构:

博客文章(原始数据)

博客文章ID标签
1python
2python
3linux,python
4linux,python

通过倒排索引会变成:

索引列表(倒排索引)

标签博客文章ID
python1,2,3
linux3,4

如果要搜索python标签的文章,只需要查看所有原始数据中的标签一栏,然后获取相关的文章ID即可。完全过滤掉无关的所有数据,来提高效率! 通过value值来查询到key

es的索引和lucene的索引的对比

es中索引被分为多个分片,每份分片就是一个lucene索引。

所有一个es索引是有多个lucene索引组成的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个名字还中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值