广告
返回顶部
首页 > 资讯 > 数据库 >搜索引擎之倒排索引浅析
  • 366
分享到

搜索引擎之倒排索引浅析

搜索引擎之倒排索引浅析 2016-11-02 04:11:47 366人浏览 才女
摘要

上一篇文章 elasticsearch 术语中提到了倒排索引,那么这篇文章就来讲解下什么是倒排索引,倒排索引的数据结构以及 ElasticSearch 中的倒排索引。 倒排索引 倒排索引(Inverted Index) 也常被称为

搜索引擎之倒排索引浅析

上一篇文章 elasticsearch 术语中提到了倒排索引,那么这篇文章就来讲解下什么是倒排索引,倒排索引的数据结构以及 ElasticSearch 中的倒排索引。

倒排索引

倒排索引(Inverted Index) 也常被称为反向索引,是搜索引擎中非常重要的数据结构,为什么说它重要呢,我们首先拿一本书《重构 改善既有代码的设计》举个例子:

如果一本书没有目录的话,理论上也是可以读的,只是合上书下次再次阅读的时候,就有些耗费时间了。

通过给一本书加目录页,可以快速了解这本书的大致内容分布以及每个章节的页码数,这样在查询内容的时候效率就会非常高了,所以书的目录就是书本内容的简单索引。

目录页

想象一下你要搜索 case语句 这个关键词在这本书的页码,你应该怎么办呢?有些技术类的书籍会在最后提供索引页,这本书的索引页如下:

索引页

只需要从索引页中查找 case语句,就可以查找到关键词在书本中的页码位置了。

看完这个例子,让我们来把图书和搜索引擎做个简单的类比:

图书当中的目录页就相当正向索引(Forward Index)索引页就相当于倒排索引的简单实现,在搜索引擎中,正向索引指的是文档 ID 到文档内容和单词的关联,倒排索引就是单词到文档 ID 的关系

下面来看一个很简单的例子:

文档 ID 文档内容
1 Mastering ElasticSearch
2 ElasticSearch Server
3 ElasticSearch Essentials

如上有三篇文档,每篇文档的内容都是关于 ElasticSearch 的三本书,那我们思考下怎么样变为一个倒排索引呢?

Term Count DocumentId:Position
ElasticSearch 3 1:1,2:0,3:0
Mastering 1 1:0
Server 1 2:1
Essentials 1 3:1

把书中内容出现所以的词都分成不同的关键词(Term),排列在第一栏,分别是 ElasticSearchMasteringServerEssentials;第二栏是统计了关键词在所有内容中出现的次数,比如 ElasticSearch 在内容中出现了三次,就记为 3;第三栏标注的是文档 ID 和文档出现的位置,比如 ElasticSearch 在第 1,2,3 文档中都出现了,在第一个文档所处的位置是第二个,所以标注的为 1。

以上就是简单的正排索引和倒排索引的结构,下面让我们来看下倒排索引的数据结构:

倒排索引数据结构

倒排索引的核心分为两部分,第一部分为单词词典(Term Dictionary),记录所有文档的单词以及单词到倒排列表的关联关系。在前面的例子中,单词的量并不是很多,但是在实际生产中,单词量会非常大,所以实际会采用 B+ 树和哈希拉链法去存储单词的词典,以满足高性能的插入与查询。

第二部分是倒排列表(Posting List),它记录了单词对应文档的结合,倒排列表是由倒排索引项(Posting) 组成,倒排索引项包含:

  • 文档 ID:用于获取原始信息
  • 词频(TF,Term Frequency):该单词在文档中出现的次数,用于相关性评分
  • 位置(Position):单词在文档中分词的位置,用于语句搜索(Phrase Query)
  • 偏移(Offset):记录单词的开始结束位置,实现高亮显示(比如用 GitHub 搜索的时候,搜索的关键词会高亮显示)

下面我们来用一张图来整体看下倒排索引:

一个倒排索引是由单词词典(Term Dictionary)和倒排列表(Posting List)组成的,单词词典会记录倒排列表中每个单词的偏移位置。比如当搜索 Allen 的时候,首先会通过单词词典快速定位到 Allen,然后从 Allen 这里拿到在倒排列表中的偏移,快速定位到在倒排列表中的位置,从而真正拿到倒排索引项 [12,15](这里只是列了下 Document ID,其实是像上面讲的包含 4 项信息的项),拿到这个项可以去索引上拿到原始信息,可以去计算打分排序返回给用户。

再了解了倒排索引的数据结构后,让我们来看下 ES 中的倒排索引吧!

ElasticSearch 倒排索引

那么在 ElasticSearch 中的文档是基于 JSON 格式的,其中一个文档包含多个字段,每个字段都会有自己的倒排索引。在 Mapping 中可以去设置对某些字段不做索引,这样做可以节省存储空间,但同时也会导致这个字段无法搜索了。

比如一个文档,其中包含两个字段 usernamejob

{
    "username":"wupx",
    "job":"programmer"
}

在构建索引的时候是根据字段构建的,那么 ES 中 username 会有一个倒排索引,job 也会有一个倒排索引。

总结

这篇文章主要介绍了什么是倒排索引以及它的数据结构,下一篇文章将会学习如何在 ElasticSearch 中分词来形成倒排索引。

参考文献

Elasticsearch核心技术与实战

https://dwz.cn/ELv7FvuX

您可能感兴趣的文档:

--结束END--

本文标题: 搜索引擎之倒排索引浅析

本文链接: https://www.lsjlt.com/news/4769.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 搜索引擎之倒排索引浅析
    上一篇文章 ElasticSearch 术语中提到了倒排索引,那么这篇文章就来讲解下什么是倒排索引,倒排索引的数据结构以及 ElasticSearch 中的倒排索引。 倒排索引 倒排索引(Inverted Index) 也常被称为...
    99+
    2016-11-02
    搜索引擎之倒排索引浅析
  • 搜索引擎的倒排索引是什么
    本篇内容主要讲解“搜索引擎的倒排索引是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“搜索引擎的倒排索引是什么”吧!什么是倒排索引?  见其名知其意,有倒排索引,对应肯定,有正向索引。&nbs...
    99+
    2023-06-04
  • Elasticsearch之倒排索引及索引操作
    目录倒排索引一 倒排索引是什么二 举例三 倒排索引待解决的问题索引操作一 索引初始化二 查询索引配置三 更新索引四 删除索引倒排索引 一 倒排索引是什么 倒排索引源于实际应用中需要根...
    99+
    2022-11-10
  • 【Elasticsearch 7 探索之路】(三)倒排索引
    上一篇,我们介绍了 ES 文档的基本 CURE 和批量操作。我们都知道倒排索引是搜索引擎非常重要的一种数据结构,什么是倒排索引,倒排索引的原理是什么。 1 索引过程 在讲解倒排索引前,我们先了解索引创建,下图是 Elasticsearch ...
    99+
    2019-11-04
    【Elasticsearch 7 探索之路】(三)倒排索引
  • 亚马逊搜索引擎
    亚马逊搜索引擎提供多种搜索选项,包括搜索结果页、商品列表、品牌搜索、商品详情页等。用户可以通过简单的搜索框输入关键字,然后按照商品分类、价格、评论、销量等搜索条件进行筛选。搜索结果页会显示所有已被搜索过的结果,以及一些新的、热门的商品列表。...
    99+
    2023-10-27
    亚马逊 搜索引擎
  • 什么是搜索引擎
    搜索引擎是一种帮助用户获取互联网信息的重要工具。通过索引和算法分析互联网上的信息,提供最准确、最有价值的搜索结果。搜索引擎的发展对人们的生活产生了深远的影响,并在信息获取、商业和政治等方面发挥着重要作用。本教程操作系统:windows10系...
    99+
    2023-08-02
  • 如何优化本地搜索引擎排名
    优化本地搜索引擎排名是提升地域性业务可见度的关键。该过程主要涉及:1、Google My Business(GMB)优化、2、关键词研究与应用、3、地理位置标签、4、获取本地评价和评论、5、本地SEO链接建设、6、网站技术优化、7、社交媒体...
    99+
    2023-10-29
    搜索引擎排名
  • Java Spring 索引教程:你知道如何提高搜索引擎排名吗?
    随着互联网的普及,搜索引擎已经成为人们获取信息的主要途径。因此,提高搜索引擎排名已经成为各种网站和企业追求的目标。在这个过程中,Java Spring框架提供了一些强大的索引功能,可以帮助网站优化搜索引擎排名。本文将介绍Java Spri...
    99+
    2023-07-01
    spring 索引 教程
  • 浅谈索引系列之本地索引与全局索引
    分区表按照类型可以分为范围分区(Range)、列表分区(List)以及哈希分区(Hash),表被分区后,其对应的索引也会与普通表的索引有所不同。 基本概念    &nb...
    99+
    2022-10-18
  • 搜索一文入门ElasticSearch(节点分片CRUD倒排索引分词)
    目录ElasticSearch基本概念:索引、文档和REST ApiJson文档文档的元数据索引分布式系统的可用性和扩展性分布式特性节点分片查看集群的健康状况CRUD文档的CRUDC...
    99+
    2023-03-23
    ElasticSearch搜索入门 ElasticSearch搜索
  • Python实战之手写一个搜索引擎
    目录一、前言二、工作流程三、数据模块四、索引模块五、搜索模块一、前言 这篇文章,我们将会尝试从零搭建一个简单的新闻搜索引擎 当然,一个完整的搜索引擎十分复杂,这里我们只介绍其中最为核...
    99+
    2022-11-12
  • 怎么使用倒排索引极速提高字符串搜索效率
    这篇文章主要讲解了“怎么使用倒排索引极速提高字符串搜索效率”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用倒排索引极速提高字符串搜索效率”吧!在Python中,如果要判断一个字符串是否...
    99+
    2023-06-15
  • 浅谈用Python实现一个大数据搜索引擎
    搜索是大数据领域里常见的需求。Splunk和ELK分别是该领域在非开源和开源领域里的领导者。本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索的基本原理。 布隆过滤器 (B...
    99+
    2022-06-04
    浅谈 搜索引擎 数据
  • Lucene倒排索引原理是什么
    本篇内容主要讲解“Lucene倒排索引原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Lucene倒排索引原理是什么”吧!一、搜索引擎介绍1.1 搜索引擎是什么这里引用百度百科的介绍:搜...
    99+
    2023-06-02
  • 浅析MysQL B-Tree 索引
    B-Tree 索引 不同的存储引擎也可能使用不同的存储结构,i如,NDB集群存储引擎内部实现使用了T-Tree结构存储这种索引,即使其名字是BTREE;InnoDB使用的是B+Tree。 B-Tree通常一位这所有...
    99+
    2022-05-22
    MysQL B-Tree 索引 MysQL B-Tree MysQL 索引
  • 如何提高网站在搜索引擎获得排名
    这篇文章主要为大家展示了“如何提高网站在搜索引擎获得排名”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何提高网站在搜索引擎获得排名”这篇文章吧。  网站的域名  我们都知道要让你的网站在互联网...
    99+
    2023-06-10
  • 搜索引擎是否对html5友好
    这篇文章主要介绍搜索引擎是否对html5友好,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 搜索引擎对html5友好,搜索引擎蜘蛛能够更加轻易的抓取和索引...
    99+
    2022-10-19
  • PHP怎么实现搜索引擎类
    小编给大家分享一下PHP怎么实现搜索引擎类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!PHP搜索引擎类1.类文件:class grabble{ &nb...
    99+
    2023-06-17
  • internet搜索引擎指的是什么
    这篇文章主要介绍internet搜索引擎指的是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!internet搜索引擎是internet中的一个“WWW服务器”,它的主要任务是:在Internet中主动搜索其他WW...
    99+
    2023-06-14
  • 各大搜索引擎收录入口
    >> 搜索引擎网站收录地址大全 360搜索引擎登录入口:http://info.so.360.cn/site_submit.html百度搜索网站登录口:http://www.baidu.com/search/url_submit.html百...
    99+
    2023-08-31
    搜索引擎 php 百度
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作