ES倒排索引基本原理

索引(index)可以分为正序索引(Forward Indexes)和倒排索引(Inverted Index)两种。在关系型数据库中使用索引可以避免数据检索走全表扫描,将检索的时间复杂度从O(n)降到了O(logn)。例如,一本字典在开篇几页记录了每个字和所在页码的映射关系,当我们需要查阅某个字的时候不需要从每一页开始搜索,通过这个映射关系就能快速找到需要搜索的词项。假设现在有三个文档:doc1, doc2, doc3

doc1: Welcome to Hotel California

doc2: Welcome to the heaven

doc3: the dog is very cute

在关系型数据库中存储这三个文档并且建立索引,文档在数据库中的存储结构大概如下所示

Doc ID Doc Content
1 Welcome to Hotel California
2 Welcome to the heaven
3 the dog is very cute

通过建立这种文档id与文档内容的映射关系,在关系型数据库中可以快速查找到文档的具体位置,但是如果需要对文档中某些词项进行检索,则需要进行全表扫描,这个时候正序索引就失效了。

倒排索引的思想是建立文档中每个词项与文档的的映射关系,如下所示

Term Doc Id
welcome Doc1, Doc2
to Doc1,Doc2
the Doc2,Doc3
dog Doc3
heaven Doc2
.... ...

可以看出通过倒排索引,搜索任意一个词项都能快速定位到所在位置。通过上述例子可以看出顺序索引是文档ID与文档内容和单词的关联,倒排索引是单词到文档ID的映射关系。

倒排索引核心组成

倒排索引主要包括两部分:单词词典和倒排列表。

  • 单词词典:记录所有文档的单词,记录单词和倒排列表的关联关系
  • 倒排列表:记录单词与对应文档集合,由倒排索引项组成
    • 倒排索引项:主要由文档ID,词频TF(单词在文档中出现的次数,用于相关性评分),位置(Position,单词在文档中分词的位置,用于语句搜索) ,偏移(Offset,记录单词的开始结束位置,用于实现高亮显示)

Elaticsearch的JSON文档中每个字段都有自己的倒排索引,可以对文档中不需要搜索的字段不做索引,这样可以节省存储空间

Elaticsearch倒排索引的更多相关文章

  1. Hadoop之倒排索引

    前言: 从IT跨度到DT,如今的数据每天都在海量的增长.面对如此巨大的数据,如何能让搜索引擎更好的工作呢?本文作为Hadoop系列的第二篇,将介绍分布式情况下搜索引擎的基础实现,即“倒排索引”. 1. ...

  2. MapReduce实现倒排索引(类似协同过滤)

    一.问题背景 倒排索引其实就是出现次数越多,那么权重越大,不过我国有凤巢....zf为啥不管,总局回应推广是不是广告有争议... eclipse里ctrl+t找接口或者抽象类的实现类,看看都有啥方法, ...

  3. [Search Engine] 搜索引擎技术之倒排索引

    倒排索引是搜索引擎中最为核心的一项技术之一,可以说是搜索引擎的基石.可以说正是有了倒排索引技术,搜索引擎才能有效率的进行数据库查找.删除等操作. 1. 倒排索引的思想 倒排索引源于实际应用中需要根据属 ...

  4. Lucene 工作原理 之倒排索引

      1.简介 倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排 ...

  5. MapReduce实例-倒排索引

    环境: Hadoop1.x,CentOS6.5,三台虚拟机搭建的模拟分布式环境 数据:任意数量.格式的文本文件(我用的四个.java代码文件) 方案目标: 根据提供的文本文件,提取出每个单词在哪个文件 ...

  6. 倒排索引压缩:改进的PForDelta算法

    由于倒排索引文件往往占用巨大的磁盘空间,我们自然想到对数据进行压缩.同时,引进压缩算法后,使得磁盘占用减少,操作系统在query processing过程中磁盘读取效率也能提升.另外,压缩算法不仅要考 ...

  7. hadoop学习笔记之倒排索引

    开发工具:eclipse 目标:对下面文档phone_numbers进行倒排索引: 13599999999 1008613899999999 12013944444444 13800138000137 ...

  8. 【hadoop2.6.0】倒排索引遇到问题了

    想实现书上倒排索引的例子,但是我不会java想用C++写,如果用hadoop streaming 那么输入必须是标准输入的形式, 那么我怎么获得每个文件的文件名呢? 查了一下,还有一种方法叫做hado ...

  9. hadoop倒排索引

    1.前言 学习hadoop的童鞋,倒排索引这个算法还是挺重要的.这是以后展开工作的基础.首先,我们来认识下什么是倒拍索引: 倒排索引简单地就是:根据单词,返回它在哪个文件中出现过,而且频率是多少的结果 ...

随机推荐

  1. 解决vscode+python不提示numpy函数的问题

    前言 使用vscode编写numpy代码时,对于numpy.array()等方法总是无法提示.查找了很多博客后,大部分都是修改配置和安装多种vscode插件,经过尝试后方法对于我来说无效.最后在调试p ...

  2. docker容器dockerfile详解

    docker公司在容器技术发展中提出了镜像分层的理念,可以说也是这个革命性的理念让原本只不过是整合linux内核特性的容器,开始野蛮生长. docker通过UnionFS联合文件系统将镜像的分层实现合 ...

  3. Android 9.0 添加预置第三方输入法/设置默认输入法(软键盘)

    前言 在一些Android项目中往往需要预置第三方输入法或自己的输入法,这篇文章就简单讲解如何预置第三方输入法apk及设置默认输入法 结果展示 在介绍基本的调整方法前,先看看效果图, 如下 调整方法 ...

  4. 单片机学习(八)点阵LED的使用

    目录 一.点阵LED的理论知识 1. 点阵屏的打开方式 2. LED点阵简介 3. 点阵LED的结构和操作方式 4. 74HC595模块 PPT上的简介 串行转并行的工作原理 二.编码实现 1. C5 ...

  5. F与Q查询 事务 choices参数

    F与Q查询 F查询 当我们需要将两个字段对应的数据进行比较时就需要用到F查询. select * from book where sold > stock 1.例如需要将售出部分数据和库存数据进 ...

  6. SSH以及ROS远程登录设置保姆级教程

    本文用来实现在同一局域网内的两台计算机之间的相互通信,实现一台计算机登录到另一台计算机,本文基于SSH来实现. 1.SSH简介 Secure Shell(SSH)是由 IETF(The Interne ...

  7. python的基础---常用的正则表达式

    """# 一.re 模块 1.作用:根据规则去匹配字符串 2.表达式:匹配字符串的规则 3.常用方法 findall():[掌握]匹配所有的字符串,把匹配结果作为一个列表 ...

  8. NOIP 模拟 $36\; \rm Cicada 与排序$

    题解 \(by\;zj\varphi\) 设 \(rk_{i,j}\) 表示第 \(i\) 个数最后在相同的数里排第 \(j\) 位的概率. 转移时用一个 \(dp\),\(dp_{i,j,0/1}\ ...

  9. NOIP 模拟 7 回家

    题解 题目 第一眼,板子题,不就是一个缩点吗?后来一想不对,哪有这么傻的出题人呢,出个这水题. 一想,不对,不仅要求割点,还要判断这个割点是否在搜索树 \(n\) 的祖先上.想到这后,我哈哈大笑,还想 ...

  10. 公司新来了一个质量工程师,说团队要保证 0 error,0 warning

    摘要:静态代码检查又称为静态程序分析,是指在不运行计算机程序的条件下,进行程序分析的方法. 本文分享自华为云社区<公司新来了一个质量工程师,说团队要保证 0 error,0 warning> ...