返回顶部
首页 > 资讯 > 数据库 >【Elasticsearch 7 探索之路】(三)倒排索引
  • 457
分享到

【Elasticsearch 7 探索之路】(三)倒排索引

【Elasticsearch7探索之路】(三)倒排索引 2019-11-04 13:11:52 457人浏览 无得
摘要

上一篇,我们介绍了 ES 文档的基本 CURE 和批量操作。我们都知道倒排索引是搜索引擎非常重要的一种数据结构,什么是倒排索引,倒排索引的原理是什么。 1 索引过程 在讲解倒排索引前,我们先了解索引创建,下图是 elasticsearch

上一篇,我们介绍了 ES 文档的基本 CURE 和批量操作。我们都知道倒排索引是搜索引擎非常重要的一种数据结构,什么是倒排索引,倒排索引的原理是什么。

1 索引过程

在讲解倒排索引前,我们先了解索引创建,下图是 elasticsearch 中数据索引过程的流程。

从上图可以看到,文档未在 ES 中进行索引,而是 由 Analyzer 组件对其执行一些操作并将其拆分为 token/term。然后将这些术语作为倒排索引存储在磁盘中。假设我们有两个名为 name 和 age 字段,当要将文档索引到 ES 时,Analyzers 组件 以某些定界符(有默认定界符,例如空格,句号等)将它们分割开获取 token,再对每个 token 应用特定的过滤器。经过分析的这些标记称为 term。然后将这些 term 针对该字段)存储在倒排列表中。

2 倒排索引

2.1 正排与倒排索引

一般在我们阅读图书,我们会根据目录快速定位想要阅读的章节,过了一段时间,你想要的回顾之前某一个知识点,你发现从目录难以查找到对应的地方,这时你可能就会从索引页从去查找对应内容索引,从而找到页码。

搜索引擎其实跟我们的使用图书很相似,下面我来对图书和搜索引擎进行一个简单的类比,来看一下搜素引擎中正排和倒排索引。

  • 图书
    • 正排索引-目录页
    • 倒排索引-索引页
  • 搜索引擎
    • 正排索引-文档 Id 到文档内容和单词的关联
    • 倒排索引-单词到文档 Id 的关系

2.2 倒排索引的核心组成

举个例子,假设我们有 3 个文档:

Doc 1:breakthrough drug for schizophrenia

Doc 2:new schizophrenia drug 

Doc 3:new approach for treatment of schizophrenia

经过分析,文件中的术语如下

文档 分词结果
Doc 1 breakthrough,drug,for,schizophrenia
Doc 2 new,schizophrenia,drug
Doc 3 new,approach,for,treatment,of

倒排列表的元数据结构:

(DocID;TF;)

其中:

  • DocID:出现某单词的文档ID

  • TF(词频):单词在该文档中出现的次数

  • POS:单词在文档中的位置

则它们生成的倒排索引

单词 逆向文档频率 倒排列表(DocID;TF;))
breakthrough 1 (1;1;<1>)
drug 2 (1;1;<2>),(2;1;<3>)
for 2 (1;1;<3>),(3;1;<3>)
schizophrenia 2 (1;1;<4>),(2;1;<2>)
new 2 (2;1;<1>),(3;1;<1>)
approach 1 (3;1;<2>)
treatment 1 (3;1;<4>)
of 1 (3;1;<5>)
  • ES 倒排索引包含两个部分

    • 单词词典 (Term Dictionary),索引最小单位,记录所有文档的单词,记录单词到倒排列表的关联关系
      • 单词词典一般都会非常多,通过 B+ 树或 Hash 表方式以满足高性能的插入与查询
    • 倒排列表(Posting List)-由倒排索引项(Posting)组成
      • 文档 ID
      • 词频 TF,该单词在文档中出现的次数,用于相关性评分
      • 位置(Position),单词在文档中分词的位置。用于语句搜索(phrase query)
      • 偏移(Offset),记录单词的开始结束位置,实现高亮显示

ES 也可以指定对某些字段不做索引

  • 优点:节省存储空间
  • 缺点:字段无法被搜索

3 总结

在之前文章说了 ES 的文档是基于 JSON 格式,在我们创建索引的时候,对每一个文档记录对应索引相关的信息。在对倒排索引进行搜索时,查询单词是否在单词字典,获取单词在倒排列表的指针,获取有该单词单词的文档 Id 列表,通过 ES 的倒排索引,我们轻易对全文进行快速搜素。

您可能感兴趣的文档:

--结束END--

本文标题: 【Elasticsearch 7 探索之路】(三)倒排索引

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

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

猜你喜欢
  • 【Elasticsearch 7 探索之路】(三)倒排索引
    上一篇,我们介绍了 ES 文档的基本 CURE 和批量操作。我们都知道倒排索引是搜索引擎非常重要的一种数据结构,什么是倒排索引,倒排索引的原理是什么。 1 索引过程 在讲解倒排索引前,我们先了解索引创建,下图是 Elasticsearch ...
    99+
    2019-11-04
    【Elasticsearch 7 探索之路】(三)倒排索引
  • Elasticsearch之倒排索引及索引操作
    目录倒排索引一 倒排索引是什么二 举例三 倒排索引待解决的问题索引操作一 索引初始化二 查询索引配置三 更新索引四 删除索引倒排索引 一 倒排索引是什么 倒排索引源于实际应用中需要根...
    99+
    2024-04-02
  • 搜索引擎之倒排索引浅析
    上一篇文章 ElasticSearch 术语中提到了倒排索引,那么这篇文章就来讲解下什么是倒排索引,倒排索引的数据结构以及 ElasticSearch 中的倒排索引。 倒排索引 倒排索引(Inverted Index) 也常被称为...
    99+
    2016-11-02
    搜索引擎之倒排索引浅析
  • 如何理解Elasticsearch倒排索引与分词
    本篇内容主要讲解“如何理解Elasticsearch倒排索引与分词”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Elasticsearch倒排索引与分词...
    99+
    2024-04-02
  • 搜索一文入门ElasticSearch(节点分片CRUD倒排索引分词)
    目录ElasticSearch基本概念:索引、文档和REST ApiJson文档文档的元数据索引分布式系统的可用性和扩展性分布式特性节点分片查看集群的健康状况CRUD文档的CRUDC...
    99+
    2023-03-23
    ElasticSearch搜索入门 ElasticSearch搜索
  • 搜索引擎的倒排索引是什么
    本篇内容主要讲解“搜索引擎的倒排索引是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“搜索引擎的倒排索引是什么”吧!什么是倒排索引?  见其名知其意,有倒排索引,对应肯定,有正向索引。&nbs...
    99+
    2023-06-04
  • ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析
    这篇文章主要介绍了ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析文章都...
    99+
    2023-07-05
  • ElasticSearch之索引模板滚动索引实现详解
    目录一. 前言二. 索引三. 索引模板3.1 索引模板的创建3.2 索引模板 Setting3.3 索引映射 :mapping四. 业务功能4.1 创建滚动索引4.2 创建和绑定策略...
    99+
    2023-05-16
    ElasticSearch索引模板滚动索引 ElasticSearch索引
  • Lucene倒排索引原理是什么
    本篇内容主要讲解“Lucene倒排索引原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Lucene倒排索引原理是什么”吧!一、搜索引擎介绍1.1 搜索引擎是什么这里引用百度百科的介绍:搜...
    99+
    2023-06-02
  • Golang初探:探索之路开始
    【Golang简介:一切从这里开始】 Golang,也被称为Go语言,是一种由Google开发的开源编程语言。自2007年开始设计,2009年正式发布,Golang以其出色的性能、简洁...
    99+
    2024-02-24
    golang 简介 开始 go语言 网络编程 在线课程 垃圾回收器 golang开发 标准库
  • Node.js 进阶之路:Sails.js 引领你探索未知
    Sails.js 是一款备受推崇的 Node.js MVC 框架,可简化 Web 开发并加快应用程序开发速度。作为 Node.js 进阶的理想选择,它提供了一系列强大功能和特性,使开发者能够创建健壮且可扩展的 Web 应用程序。 特性 ...
    99+
    2024-04-02
  • ElasticSearch学习之Es索引Api操作
    目录Es索引Api操作创建索引索引别名添加索引别名查询索引别名删除索引别名mappingsettings查询索引查询当前集群全部索引查询单个索引修改索引删除索引结束语Es索引Api操...
    99+
    2023-01-31
    ElasticSearch Es索引Api操作 Es索引Api操作
  • elasticsearch索引index之put mapping怎么设置
    本篇内容主要讲解“elasticsearch索引index之put mapping怎么设置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“elasticsearch索引index之put...
    99+
    2023-06-30
  • 探索Java和Unix之间的框架索引关系。
    探索Java和Unix之间的框架索引关系 在计算机编程领域,Java和Unix都是非常重要的技术。Java是一种广泛使用的编程语言,而Unix是一种广泛使用的操作系统。尽管它们在不同的领域中使用,但它们之间有许多相似之处。本文将探索Java...
    99+
    2023-06-16
    unix 框架 索引
  • MySQL索引优化之分页探索详细介绍
    目录​​MySQL​​索引优化之分页探索案例一案例二​​MySQL​​索引优化之分页探索 表结构 CREATE TABLE `demo` ( `id` int(11) NOT...
    99+
    2024-04-02
  • elasticsearch索引index之Translog数据功能分析
    目录translog的结构及写入方式translogFile的继承关系TranslogFile快照的方法总结translog的结构及写入方式 跟大多数分布式系统一样,es也通过临时写...
    99+
    2024-04-02
  • elasticsearch索引index之put mapping的设置分析
    目录mapping的设置过程put mappingupdateTask响应总结mapping的设置过程 mapping机制使得elasticsearch索引数据变的更加灵活,近乎于n...
    99+
    2024-04-02
  • 怎么使用倒排索引极速提高字符串搜索效率
    这篇文章主要讲解了“怎么使用倒排索引极速提高字符串搜索效率”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用倒排索引极速提高字符串搜索效率”吧!在Python中,如果要判断一个字符串是否...
    99+
    2023-06-15
  • Elasticsearch 在地理信息空间索引的探索和演进问题分析
    目录一、业务背景二、背景知识三、方案演进3.1 史前时代3.2 Elasticsearch 2.0 版本3.3 Elasticsearch 2.2 版本3.4 Elasticsear...
    99+
    2024-04-02
  • 探索Go语言的Web开发之路
    Go语言作为一种强大且高效的编程语言,被越来越多的开发者用于Web开发。本文将探索Go语言的Web开发之路,通过具体的代码示例来展示如何利用Go语言创建一个简单的Web应用程序。 首先...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作