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. Notes about "Exploring Expect"

    Chapter 3 Section "The expect Command": expect_out(0,string) can NOT be written as "e ...

  2. Abp vNext 基础篇丨分层架构

    介绍 本章节对 ABP 框架进行一个简单的介绍,摘自ABP官方,后面会在使用过程中对各个知识点进行细致的讲解. 领域驱动设计 领域驱动设计(简称:DDD)是一种针对复杂需求的软件开发方法.将软件实现与 ...

  3. 008 PHY(Physical Layer,PHY)

    一.PHY PHY((Physical Layer,PHY))是IEEE802.3中定义的一个标准模块,STA(station management entity,管理实体,一般为MAC或CPU)通过 ...

  4. Echarts 图表位置调整

    Echarts 图表的位置调整 折线图和柱状图,通过grid属性调整. grid:{ show:false, top:'20%', right:'5%', bottom:'10%', left:'10 ...

  5. 将JDK默认编码设置为UTF-8

    此博文非原创:参考小兵qwer   https://blog.csdn.net/xiaobing_122613/article/details/70209716 只是想留下对自己有用的东西,同时帮助更 ...

  6. docker 实现redis主从复制

    目录 一.概览 二.安装master库 三.安装slave从库 四.错误分析 五.参考网址 一.概览 主库:192.168.3.13:6380 从库一:192.168.3.14:6381 从库二:19 ...

  7. elasticsearch可视化工具-dejavu

    https://github.com/appbaseio/dejavu docker run -p 1358:1358 -d appbaseio/dejavu http.port: 9200 http ...

  8. Elastic_Search 和java的入门结合

    1, pom 文件添加依赖... 2, config 配置文件 3, 写接口文件

  9. C#用SOCKET发送HTTP请求小例

    private void button1_Click(object sender, EventArgs e) { string urlStr = this.textUrl.Text ; if (url ...

  10. mysql优化: 内存表和临时表

    由于直接使用临时表来创建中间表,其速度不如人意,因而就有了把临时表建成内存表的想法.但内存表和临时表的区别且并不熟悉,需要查找资料了.一开始以为临时表是创建后存在,当连接断开时临时表就会被删除,即临时 ...