Elasticsearch 与传统关系型数据库的对比、倒排索引原理解析

Elasticsearch 和 传统关系型数据库的对比

  1. Elasticsearch中的概念与关系型数据库对比
Relational DB Databases Tables Rows Columns
关系型数据库 数据库
Elasticsearch Indices Types Documents Fields
搜索引擎 索引 类型 文档 域(字段)
  1. 在Elasticsearch中,所有的字段缺省都建了索引。 也就是说每一个字段都有一个倒排索引,用于快速查询。
  2. es支持http协议(json格式)(9200端口)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成),传统关系型数据库不支持。
  3. es支持分片和复制,从而方便水平分割和扩展,复制保证了es的高可用与高吞吐。
索引不可变原因

倒排索引包含:

  • 文档的列表
  • 文档的数量
  • 词条在每个文档中出现的次数
  • 出现的位置
  • 每个文档的长度
  • 所有文档的平均长度

索引不可变的原因:

  • 不需要锁,提升并发性能
  • 可以一直保存在缓存中(filter,过滤查询可以体现,详情查看:Elasticsearch 过滤查询
  • 节省cpu和io开销

倒排索引

Elasticsearch使用一种称为倒排索引的结构,她适用于快速的全文搜索。
一个倒排索引由文档中所有不能重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

示例:

1、假设文档集合包含五个文档,每个文档内容表所示,表的最左端一栏是每个文档对应的文档编号,我们的任务就是对这个文档集合建立倒排索引。
文档编号 文档内容
1 谷歌地图之父跳槽Facebook
2 谷歌地图之父加盟Facebook
3 谷歌地图创始人拉斯离开谷歌加盟Facebook
4 谷歌地图之父跳槽Facebook与Wave项目取消有关
5 谷歌地图之父拉斯加盟社交网站facebook
2、中文和英文等语言不同、单词之间没有明确分隔符号,所以首先要用分词系统将文档自动切分成单词序列。这样每个文档就转换为由单词序列构成的数据流,为了系统后续处理方便,需要对每个不同的单词赋予唯一的单词编号,同时记录下哪些文档包含这个单词,在如此处理结束后,我们可以得到最简单的倒排索引。

“单词ID”一栏记录了每个单词的单词编号,第二栏是对应的单词,第三栏即每个单词对应的倒排索引。

单词ID 单词 倒排索引(DocID)
1 谷歌 1,2,3,4,5
2 地图 1,2,3,4,5
3 之父 1,2,4,5
4 跳槽 1,4
5 Facebook 1,2,3,4,5
6 加盟 2,3,5
7 创始人 3
8 拉斯 3,5
9 离开 3
10 4
11 Wave 4
12 项目 4
13 取消 4
14 有关 4
15 社交 5
16 网站 5
3、索引系统还可以记录除此之外的更多信息,下表还记录了单词频率信息(TF)即这个单词在某个文档中出现的次数,之所以要记录这个信息,是因为词频信息在搜索结果排序时,计算查询和文档相似度是很重要的一个计算因子,所以将其记录在倒排列表中,以方便后续排序时进行分值计算。
单词ID 单词 倒排索引(DocID:TF)
1 谷歌 (1:1),(2:1),(3:2),(4:1),(5:1)
2 地图 (1:1),(2:1),(3:1),(4:1),(5:1)
3 之父 (1:1),(2:1),(4:1),(5:1)
4 跳槽 (1:1),(4:1)
5 Facebook (1:1),(2:1),(3:1),(4:1),(5:1)
6 加盟 (2:1),(3:1),(5:1)
7 创始人 (3:1)
8 拉斯 (3:1),(5:1)
9 离开 (3:1)
10 (4:1)
11 Wave (4:1)
12 项目 (4:1)
13 取消 (4:1)
14 有关 (4:1)
15 社交 (5:1)
16 网站 (5:1)
4、倒排列表中还可以记录单词在某个文档出现的位置信息

(1,<11>,1),(2,<7>,1),(3,<3,9>,2)
有了这个索引系统,搜索引擎可以很方便地相应用户的查询,比如用户输入查询词“Facebook”,搜索系统查找倒排索引,从中可以读出包含这个单词的文档,这些文档就是提供给用户的搜索结果,而利用单词频率信息、文档频率信息既可以对这些候选搜索结果进行排序,计算文档和查询的相似性,按照相似性得分由高到低排序输出,此即为搜索系统的部分内部流程。

示例:
  1. The quick brown fox jumped over the lazy dog
  2. Quick brown foxes leap over lazy dogs in summer

倒排索引(x代表存在于的文档中)

Term Doc_1 Doc_2
Quick x
The x
brown x x
dog x
dogs x
fox x
foxes x
in x
jumped x
lazy x x
leap x
over x x
quick x
summer x
the x
  1. 搜索quick brown(计算相关度分数时,文档1的匹配度高,分数会比文档2高):
Term Doc_1 Doc_2
brown x x
quick x
Total 2 1
  1. 标准化规则(normalization):

Quick 和 quick 以独立的词条出现,然后用户可能认为它们是相同的词。
fox 和 foxes 非常相似,就像 dog 和 dogs,它们由相同的词根。
jumped 和 leap ,尽管没有相同的词根,但是它们的意思很相近,是同义词。
搜索含有 Quick fox的文档是搜不到的。
使用标准规划规则,建立倒排索引的时候,会对拆分出的各个单词进行相应的处理,以提升后面搜索的时候能够搜索到相关联的文档的概率。

Term Doc_1 Doc_2
brown x x
dog x x
fox x x
in x
jump x x
lazy x x
over x x
quick x x
summer x
the x x
Image placeholder
schaffers
未设置
  13人点赞

没有讨论,发表一下自己的看法吧

推荐文章
从关系型数据库到分布式机器学习,揭秘腾讯大数据十年发展历程

大数据技术在过去10多年中极大改变了企业对数据的存储、处理和分析方式。如今,大数据技术逐渐成熟,涵盖了计算、存储、数仓、数据集成、可视化、NOSQL、OLAP分析、机器学习等丰富领域。在未来,大数据技

如何基于 Kafka 构建一个关系型数据库

在这篇文章里,我将分享如何通过扩展KCache(https://github.com/rayokota/kcache)来实现一个全功能的关系型数据库,我把这个数据库叫作KarelDB(https://

Elasticsearch 数据写入原理分析

前言最近TL分享了下《Elasticsearch基础整理》https://www.jianshu.com/p/e82…,蹭着这个机会。写个小文巩固下,本文主要讲ES->Lucene的底层结构,然后详细

架构修炼之道 | 一个传统网关系统有几种 “死” 法

本文节选自《架构修炼之道》,作者京东王新栋。图| meghan-holmes-779221-unsplash这里说的传统,是按照网关技术演进的阶段划分的,从同步到半同步,再到全异步,我们将同步和半同步

传统数据库是否会成为企业数字化转型的障碍?

国外Couchbase公司最近发布的一项调查显示,缺乏灵活性和可扩展性被认为是传统数据库最大的问题。该公司另一份报告显示,尽管数据库存在的问题会降低企业竞争力,但仍有超过半数的的企业和IT业内人士完全

27 亿电子邮件地址外泄!ElasticSearch数据库再次中招

数据泄露事件近年来时有发生,哪怕是大体量的Facebook也未能幸免。可以说数据泄露无论是对用户还是对企业来讲都造成了一定的损失和影响。针对频频发生的数据泄露事件,不少企业都加大网络安全建设力度,也起

Nebula 架构剖析系列(二)图数据库的查询引擎设计

摘要上文(存储篇)说到数据库重要的两部分为存储和计算,本篇内容为你解读图数据库Nebula在查询引擎QueryEngine方面的设计实践。在Nebula中,QueryEngine是用来处理Nebula

如何保证缓存与数据库的双写一致性?

分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?CacheAsidePa

合理建立Hadoop数据库的7个步骤

数据湖的概念起源于大数据的出现——且数据已成为企业的核心资产,Hadoop则是作为存储和管理数据的平台而出现。但是,盲目地投入Hadoop数据湖建设并不一定会使您的企业进入大数据时代——至少不是以一种

中兴数据库的决心

摘要:在数据库方面,中兴有着17年的相关技术积累储备,早在2002年,中兴就启动了数据库相关技术的研发,最近5年,中兴更是加强数据库投入,累计投入10个亿。目前,中兴拥有一支超过500人的数据库研发团

时序数据库的秘密 —— 快速检索

Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,

面试官问:请介绍一下MySQL数据库的锁机制?

为什么要加锁问题背景当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。要解决的问题多用户环境下保证数

阿里面试题:如何保证缓存与数据库的双写一致性?

作者:你是我的海啸出处:https://blog.csdn.net/chang384915878/article/details/86756463只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只

DTCC观察:华为云数据库的优势积累与技术选择

摘要:作为公有云市场的重磅参与者,华为云数据库相比竞争对手有哪些优势?这可能是很多不了解华为云数据库人的第一反应。华为云数据库产品架构如何布局?作为第一个基于MySQL8.0开发的云原生分布式数据库,

腾讯林晓斌:数据库的高易用性如何实现?

腾讯云基于QQ、微信、腾讯游戏等海量业务的技术锤炼,从基础架构到精细化运营,从平台实力到生态能力建设,腾讯云将之整合并面向市场,使之能够为企业和创业者提供集云计算、云数据、云运营于一体的云端服务体验。

盘点2019:对国产数据库的一点观察和总结

“想,都是问题,做,才有答案”—–华东师范大学副校长、CCF数据库专委会副主任周傲英。之所以开篇引用周教授这句话,是因为笔者觉得,这短短10个字,是对国产数据库发展的最好诠释。中国能否翻越数据库这座大

0107 spring操作数据库的3个架子

背景数据库开发是java的核心内容之一,基础就是jdbc了;然而直接使用jdbc,需要写大量的try-catch-finally模板代码;管理系统使用hibernate作为orm框架比较方便,遵循jp

ElasticSearch 亿级数据检索案例实战

一、前言数据平台已迭代三个版本,刚开始遇到很多常见的难题,终于有时间整理一些已完善的文档了,在此分享一下。希望能帮助大家少走些弯路,在此篇幅中偏重于ES的优化。关于HBase,Hadoop的设计优化估

Elasticsearch 亿级数据检索性能优化案例实战!

一、前言数据平台已迭代三个版本,从头开始遇到很多常见的难题,终于有片段时间整理一些已完善的文档,在此分享以供所需朋友实现参考,少走些弯路,在此篇幅中偏重于ES的优化,关于HBase,Hadoop的设计

PB级数据实时查询,滴滴Elasticsearch多集群架构实践

Elasticsearch是基于Lucene实现的分布式搜索引擎,提供了海量数据实时检索和分析能力。Elastic 公司开源的一系列产品组成的ElasticStack,可以为日志服务、搜索引擎、系统监

IDC发布:4Q18云IT基础设施收入低于传统IT基础设施收入

根据IDC全球云IT基础设施季度跟踪报告,在2018年第四季度(4Q18),包括公有和私有云在内的云IT基础设施产品(服务器、企业存储和以太网交换机)销售收入同比增长28.0%,达到168亿美元。20

在云、AI时代,传统应用性能监控方案过时了吗?

近年来,企业云对IT复杂性产生巨大影响,越来越多的企业需要能够解决云复杂性上升或加速数字化转型的有效方案,而人工智能正在成为解决这些问题的不二之选。在全球智能运维浪潮下,不少公司都选择重写代码,颠覆自

打破传统 华为数存融合新架构狠在哪里?

数字经济已经成为继农业经济、工业经济之后一种新的经济社会发展形态,是新一轮产业革命的典型代表。全球都在不断的推动数字经济的发展,产业数字化、数字产业化正在给世界经济增长提供新动能。数据已成为当下新生产

三个方面告诉你,为什么说传统安全托管服务已过时

随着组织发展其安全程序,其安全环境的复杂性也在增长。复杂性和变化要求采用一种全新的方式来应对现代安全运营中心(SOC)。根据Gartner的数据现实,到2022年,50%的SOC将转变为具有集体事件响

传统灾备的痛大家都懂,阿里云定义企业级云灾备

灾备,并不是一个新鲜词,它起源于70年代。灾备,顾名思义,即容灾+备份。容灾,通常是在相隔较远的两地(同城或者异地)建立两套或多套功能相同的IT系统,目的是为了在遭遇灾害时,能保证业务连续性。而备份是

{