Elasticsearch——倒排索引

1.正向索引和反向索引

先介绍一下正向索引: 当用户发起查询时(假设查询为一个关键词),搜索引擎会扫描索引库中的所有文档,找出所有包含关键词的文档,这样依次从文档中去查找是否含有关键词的方法叫做正向索引。互联网上存在的网页(或称文档)不计其数,这样遍历的索引结构效率低下,无法满足用户需求。
正向索引结构如下:
文档1的ID→单词1的信息;单词2的信息;单词3的信息…
文档2的ID→单词3的信息;单词2的信息;单词4的信息…

3.反向索引

为了增加效率,搜索引擎会把正向索引变为反向索引(倒排索引)即把“文档→单词”的形式变为“单词→文档”的形式。倒排索引具体机构如下:
单词1→文档1的ID;文档2的ID;文档3的ID…
单词2→文档1的ID;文档4的ID;文档7的ID…

3. 单词-文档矩阵

单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型。

  • D1:乔布斯去了中国。
  • D2:苹果今年仍能占据大多数触摸屏产能。
  • D3:苹果公司首席执行官史蒂夫·乔布斯宣布,iPad2将于3月11日在美国上市。
  • D4:乔布斯推动了世界,iPhone、iPad、iPad2,一款一款接连不断。
  • D5:乔布斯吃了一个苹果。
    此时用户查询为“苹果 And (乔布斯 Or iPad2)”,表示包含单词“苹果”,同时还包含“乔布斯”或“iPad2”的其中一个。
    则“单词-文档”矩阵为:

    该矩阵可以从两个方向进行解读:
  • 纵向: 表示每个单独的文档包含了哪些单词,比如D1包含了“乔布斯这个词”,D4包含了“乔布斯”和“iPad2”。
  • 横向: 表示哪些文档包含了该单词,比如D2、D3、D5包含了“苹果”这个词。

搜索引擎的索引其实就是实现“单词-文档”矩阵的具体数据结构。可以有不同的方式来实现上述概念模型,比如“倒排索引”、“签名文件”、“后缀树”等方式,但是“倒排索引”是实现单词到文档映射关系的最佳实现方式。

4.倒排索引

倒排索引(Inverted Index):倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。

  • 单词词典(Lexicon):搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
  • 倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。
  • 倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

5.倒排索引简单实例

还是用上面提到的例子:
Doc1:乔布斯去了中国。
Doc2:苹果今年仍能占据大多数触摸屏产能。
Doc3:苹果公司首席执行官史蒂夫·乔布斯宣布,iPad2将于3月11日在美国上市。
Doc4:乔布斯推动了世界,iPhone、iPad、iPad2,一款一款接连不断。
Doc5:乔布斯吃了一个苹果。
这五个文档中的数字代表文档的ID,比如"Doc1"中的“1”。
通过这5个文档建立简单的倒排索引:

首先要用分词系统将文档自动切分成单词序列,这样就让文档转换为由单词序列构成的数据流,并对每个不同的单词赋予唯一的单词编号(WordID),并且每个单词都有对应的含有该单词的文档列表即倒排列表。如上表所示,第一列为单词ID,第二列为单词ID对应的单词,第三列为单词对应的倒排列表。如第一个单词ID“1”对应的单词为“乔布斯”,单词“乔布斯”的倒排列表为{1,3,4,5},即文档1、文档3、文档4、文档5都包含有单词“乔布斯”。

这上面的列表是最简单的倒排索引,下面介绍一种更加复杂,包含信息更多的倒排索引。

TF(term frequency): 单词在文档中出现的次数。
Pos: 单词在文档中出现的位置。
这个表格展示了更加复杂的倒排索引,前两列不变,第三列倒排索引包含的信息为(文档ID,单词频次,<单词位置>),比如单词“乔布斯”对应的倒排索引里的第一项(1;1;<1>)意思是,文档1包含了“乔布斯”,并且在这个文档中只出现了1次,位置在第一个。

Elasticsearch数据结构——倒排索引相关推荐

  1. ElasticSearch(五) 倒排索引与分词

    title: ElasticSearch(五) 倒排索引与分词 tags: ElasticSearch author: Clown95 倒排索引与分词 倒排索引 Elasticsearch 使用一种称 ...

  2. 【Elasticsearch】倒排索引原理

    1.概述 转载:elasticsearch 倒排索引原理 本文写的不错. 网上看到的一篇文章,对Lucene的倒排索引是如何执行的,说的比较易懂,就转过来分享下. Elasticsearch是通过Lu ...

  3. 关于elasticsearch索引,倒排索引简介

    参考文章:终于有人把elasticsearch原理讲通了! 小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了. 随着央视诗词大会的热播,小史开始对 ...

  4. ElasticSearch系列——倒排索引、删除映射类型、打分机制、配置文件、常见错误

    文章目录 1 倒排索引 2 删除映射类型 一 前言 二 什么是映射类型? 三 为什么要删除映射类型? 四 映射类型的替代方法 4.1 将映射类型分开存储在索引中 4.2 自定义类型字段回到顶部 五 没 ...

  5. Elasticsearch之倒排索引

    搜索引擎 正排索引 - 文档Id到文档内容.单词的关联关系 文档ID 文档内容 1 elasticsearch是最流行的搜索引擎 2 php是世界上最好的语言 3 搜索引擎是如何诞生的 倒排索引 - ...

  6. Elasticsearch的倒排索引是什么?

    1.倒排索引是搜索引擎的核心.搜索引擎的主要目标是在查找发生搜索条件的文档时提供快速搜索.倒排索引是一种像数据结构一样的散列图,可将用户从单词导向文档或网页.它是搜索引擎的核心.其主要目标是快速搜索从 ...

  7. 倒排索引的数据结构:Term index、Term Dictionary、Posting List

    2.倒排索引的数据结构 倒排索引其实包含了三种数据,分别是 倒排表(Posting List) 词项字典(Term Dictionary) 词项索引(Term Index) 这几种文件分别存储了不同的 ...

  8. Day123.ElasticSearch:CAP定理、集群搭建、架构原理及分片、倒排索引、面试题

    目录 一.CAP定理 二.ES集群 1.搭建集群: 2.head 插件安装 3.集群测试 4.核心概念 二.架构原理及分片 一. ElasticSearch 分片 二. 分片控制 三. 分片原理 1. ...

  9. ElasticSearch基础2之倒排索引原理和中文分词器es-ik

    正向索引与倒排索引 正向索引        正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档.        这种组织方法 ...

最新文章

  1. 拥抱并行流,提高程序执行速度
  2. Ubuntu16.04下配置最新Vs Code的C/C++开发环境
  3. JVM 方法区 ORACLE官方文档
  4. Runtime.getRuntime().exec();里面产生停滞(阻塞,blocking)
  5. openoffice linux 目录,Linux之安装OpenOffice
  6. 关于ZooKeeper的两点思考
  7. 企业管理器控制台本地无法访问
  8. 都2020年了,你还认为BI=报表?
  9. 页面自动刷新代码大全
  10. Python学习入门基础教程(learning Python)--5.4 Python读文件详解
  11. 使用对象方式管理XML文件
  12. [笔记]vs2015 编写汇编masm32之使用MASM32库
  13. java元组_Java中元组的使用
  14. Arduino基本知识
  15. [摘录]第4章 不道德的谈判策略
  16. ionic中android的返回键
  17. ios 渐变透明背景_PS教程丨扣出透明的玻璃瓶
  18. 新手微信小程序制作教程步骤详解!
  19. 全媒体运营师胡耀文教你:运营框架搭建让1个流量发挥大于4的价值
  20. 计算sin(x)的定积分

热门文章

  1. CSS - 基于before及after伪元素添加字符
  2. pjax php demo,jQuery pjax 应用简单示例
  3. 什么是html的事件冒泡,什么是事件冒泡?
  4. [机缘参悟-48]:鬼谷子-第七揣篇-提前收集信息、提前做出预判和实施计划
  5. Python爬虫入门之淘宝JS逆向解析请求参数Sign加密(一)
  6. 2014年MacBook pro连接Wi-Fi 5G遇到的奇怪问题
  7. 案例总结,用户体系6个难点 |如何落地,利用数据、函数模型用户成长体系
  8. 文本检测实战:使用OpenCV实现文本检测(EAST 文本检测器)
  9. 微软提出CoDi:开创性多模态扩散生成模型,实现4种模态任意输入输出
  10. webpack热更新