【Elasticsearch专栏 02】深入探索:Elasticsearch为什么使用倒排索引而不是正排索引

这篇具有很好参考价值的文章主要介绍了【Elasticsearch专栏 02】深入探索:Elasticsearch为什么使用倒排索引而不是正排索引。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为什么使用倒排索引而不是正排索引?

Elasticsearch选择使用倒排索引而不是正排索引,主要是基于倒排索引在处理全文搜索和大规模数据集时的优势。下面将详细解释为什么Elasticsearch更倾向于使用倒排索引,并提供一些简化的代码片段来说明这两种索引结构的基本差异。

1.正排索引(Forward Index)

正排索引是一种将文档映射到其包含的单词的索引结构。每个文档都有一个与之关联的单词列表,列表中的单词按照在文档中出现的顺序进行排列。正排索引可以快速找到文档中包含的单词,但对于查找包含特定单词的所有文档则不是很高效。

例如,假设有两个文档:

Document 1: "The quick brown fox jumps over the lazy dog"  
Document 2: "Quick foxes jump over lazy dogs in summer"

一个简化的正排索引可能如下所示:

Document 1 -> [the, quick, brown, fox, jumps, over, the, lazy, dog]  
Document 2 -> [quick, foxes, jump, over, lazy, dogs, in, summer]

如果想要查找包含单词"quick"的所有文档,需要遍历整个索引,检查每个文档的单词列表,这在大规模数据集中是非常低效的。

2.倒排索引(Inverted Index)

倒排索引是一种将单词映射到包含该单词的文档的索引结构。每个单词都有一个与之关联的文档列表,列表中的文档按照某种排序标准(如相关性分数)进行排列。倒排索引可以高效地找到包含特定单词的所有文档,并支持复杂的查询操作,如短语查询、通配符查询和布尔查询等。

对于上面的文档示例,一个简化的倒排索引可能如下所示:

the    -> [Document 1]  
quick  -> [Document 1, Document 2]  
brown  -> [Document 1]  
fox    -> [Document 1]  
jumps  -> [Document 1]  
over   -> [Document 1, Document 2]  
lazy   -> [Document 1, Document 2]  
dog    -> [Document 1]  
foxes  -> [Document 2]  
jump   -> [Document 2]  
dogs   -> [Document 2]  
in     -> [Document 2]  
summer -> [Document 2]

现在,如果想要查找包含单词"quick"的所有文档,只需要查找与"quick"关联的文档列表即可,这是一个非常高效的操作。

3.小结

Elasticsearch选择使用倒排索引而不是正排索引,主要是基于倒排索引在处理搜索查询时的优势。

正排索引是一种基于文档的索引结构,它将文档中的每个词汇作为关键词进行排序和存储。当查询请求到来时,Elasticsearch会根据查询中的词汇在文档中的出现频率和位置信息,对文档进行排序和匹配。这种索引结构适用于全文搜索和基于关键词的搜索,因为它能够快速定位到包含查询关键词的文档。

然而,正排索引在处理基于短语或句子的搜索时可能效果不佳,因为它无法有效地将多个相关的词汇组合在一起进行匹配。此外,随着索引值的增大,一个节点能存储的数据量会大大减少,导致B+树(一种常见的正排索引结构)变得更深,每次查询数据所需的IO次数也会增多,从而影响查询效率。

相比之下,倒排索引是一种基于词汇的索引结构,它将文档中的词汇作为索引项进行存储,并将每个词汇与其对应的文档集合进行关联。当查询请求到来时,Elasticsearch会根据查询中的词汇在倒排索引中查找与之匹配的文档集合,并进行排序和匹配。这种索引结构能够更好地处理基于短语或句子的搜索需求,因为它能够将与查询相关的多个词汇组合在一起进行匹配,从而提高了搜索的准确性和性能。

此外,倒排索引还通过使用分词器对文本进行分词,将文本切分成更小的词汇单元,并构建词汇到文档的映射关系。这种处理方式使得Elasticsearch能够更灵活地处理各种文本数据,并支持更复杂的查询操作。

因此,综合考虑倒排索引在处理搜索查询时的优势和正排索引的局限性,Elasticsearch选择使用倒排索引作为其主要的索引结构。同时,在实际应用中,Elasticsearch也会结合使用正排索引等其他索引结构,以提高搜索性能和准确性。文章来源地址https://www.toymoban.com/news/detail-836484.html

到了这里,关于【Elasticsearch专栏 02】深入探索:Elasticsearch为什么使用倒排索引而不是正排索引的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析

    Elasticsearch,作为当今最流行的开源搜索和分析引擎,以其分布式、可扩展和高可用的特性赢得了广大开发者的青睐。在Elasticsearch的分布式架构中,集群的稳健性和高可用性很大程度上依赖于其Master节点的选举机制。本文将深入剖析Elasticsearch的Master选举过程,帮助读者更好地

    2024年04月17日
    浏览(25)
  • CH02_重构的原则(什么是重构、为什么重构、何时重构)

    重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。 重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。 重构的关键在于运用大量微小且保持软件行为的步骤,一步

    2024年02月11日
    浏览(25)
  • Elasticsearch为什么快?

    概括的说,一个优秀的搜索引擎的设计,至少应该具备以下几点要求: 高效的压缩算法 快速的编码和解码算法 合理的数据结构 通用最小化算法 结合以上几点,后面我将通过一个案例来讲解,倒排索引的基本原理是什么。在了解“倒排索引”之前,我们先来看一下何为“索

    2024年02月04日
    浏览(26)
  • NFT 为什么会有差异,探索底层的铸造协议

    NFT 的流行,让许多人都对它已经不怎么陌生了。但你真正了解过它么?从表面来看,每个 NFT 之间的性质、特点以及属性和功能等都没有多大的差别,当我们深入了解时才会发现,在不同应用领域的 NFT 之间,也有一些细微的不同。是什么导致了这些差异的存在呢?这个问题

    2024年02月15日
    浏览(30)
  • 【探索 Kubernetes|作业管理篇 系列 7】探究 Pod 有什么用,为什么需要它

    大家好,我是秋意零。 前一篇,我们介绍了如何从 0 到 1 搭建 Kubernetes 集群。现在我们可以正式了解,Kubernetes 核心特征了。 今天我们来探究 Pod,为什么需要 Pod? 👿 简介 🏠 个人主页 : 秋意零 🧑 个人介绍 :在校期间参与众多云计算相关比赛,如:🌟 “省赛”、“国

    2024年02月09日
    浏览(40)
  • 深入理解 go reflect - 反射为什么慢

    我们选择 go 语言的一个重要原因是,它有非常高的性能。但是它反射的性能却一直为人所诟病,本篇文章就来看看 go 反射的性能问题。 在开始之前,有必要先了解一下 go 的性能测试。在 go 里面进行性能测试很简单,只需要在测试函数前面加上 Benchmark 前缀, 然后在函数体

    2024年02月01日
    浏览(34)
  • TCP为什么需要进行三次握手深入解析

    首先简单介绍一下TCP三次握手 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己

    2024年02月05日
    浏览(36)
  • Elasticsearch:索引状态是红色还是黄色?为什么?

    在我之前文章 “Elasticsearch:如何调试集群状态 - 定位错误信息” 中,我有详细介绍如何调试集群状态。在今天的文章中,我将详细介绍如何故障排除和修复索引状态。 Elasticsearch 是一个伟大而强大的系统,特别是创建一个可扩展性极强的分布式数据存储,并自动跟踪、管理

    2023年04月09日
    浏览(27)
  • Elasticsearch:什么是向量和向量存储数据库,我们为什么关心?

    Elasticsearch 从 7.3 版本开始支持向量搜索。从 8.0 开始支持带有 HNSW 的 ANN 向量搜索。目前 Elasticsearch 已经是全球下载量最多的向量数据库。它允许使用密集向量和向量比较来搜索文档。 向量搜索在人工智能和机器学习领域有许多重要的应用。 有效存储和检索向量的数据库对于

    2024年02月08日
    浏览(40)
  • Elasticsearch 为什么会产生文档版本冲突?如何避免?

    先让大家直观的看到 Elasticsearch 文档版本冲突。 1.1 场景1:create 场景 1.2 场景2:批量更新场景模拟 模拟脚本1:循环写入数据 index.sh。 模拟脚本2:循环update_by_query 批量更新数据 update.sh。 由于:写入脚本 index.sh 比更新脚本 update.sh (执行一次,休眠1秒)执行要快,所以更新

    2023年04月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包