倒排索引

Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

正排索引与倒排索引

什么是正排索引(forward index)?

由key查询实体的过程,是正排索引.

在搜索引擎中每个文件都对应一个文件ID,文件内容被表示为一系列关键词的集合(实际上在搜索引擎索引库中,关键词也已经转换为关键词ID。简单的,正排索引可以理解为(文件内容会对应一个分词后的集合list<< item >>) Map< id,list< item>>,能够由id快速(时间复杂度O(1))找到内容的一个数据结构。

什么是倒排索引(inverted index)?

由item查询key的过程,是倒排索引。

倒排索引可以理解为Map< item, list< id>>,能够由查询词快速(时间复杂度O(1))找到包含这个查询词的文件的数据结构。

举例:

文档编号(id) 文档内容
1 我喜欢数学
2 我喜欢编程
3 我考试数学成绩很好
4 编程太难了

分词之后的正排索引Map< id, list< item>>

文档编号(id) 分词后的集合(list< item>)
1 {我,喜欢,数学}
2 {我,喜欢,编程}
3 {我,考试,数学,成绩,很好}
4 {编程,太难了}

分词后倒排索引

  • 简单的倒排索引Map< item,list< id>>
编号 单词(item) 倒排列表(list< id>)
1 1,2,3
2 喜欢 1,2
3 数学 1,3
4 编程 2,4
5 考试 3
6 成绩 3
7 很好 3
8 太难了 4
  • 有单词频率信息(TF)的倒排索引Map< item,list< (id;TF)>>

例如,假设我们有两个文档,每个文档的 content 域包含如下内容:

  1. The quick brown fox jumped over the lazy dog
  2. Quick brown foxes leap over lazy dogs in summer

为了创建倒排索引,我们首先将每个文档的 content 域拆分成单独的 词(我们称它为 词条 或 tokens ),创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档。结果如下所示:

Term      Doc_1  Doc_2
-------------------------
Quick   |       |  X
The     |   X   |
brown   |   X   |  X
dog     |   X   |
dogs    |       |  X
fox     |   X   |
foxes   |       |  X
in      |       |  X
jumped  |   X   |
lazy    |   X   |  X
leap    |       |  X
over    |   X   |  X
quick   |   X   |
summer  |       |  X
the     |   X   |
------------------------

现在,如果我们想搜索 quick brown ,我们只需要查找包含每个词条的文档:

Term      Doc_1  Doc_2
-------------------------
brown   |   X   |  X
quick   |   X   |
------------------------
Total   |   2   |  1

两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们使用仅计算匹配词条数量的简单 相似性算法 ,那么,我们可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更佳。

倒排索引Inverted index相关推荐

  1. 倒排索引 inverted index

    2019独角兽企业重金招聘Python工程师标准>>> 1.什么是倒排索引. e>>>(⊙o⊙)- 这是我见过最垃圾的翻译了,完全让人误解他的意思. 这个名称很容易 ...

  2. MapReduce功能实现十---倒排索引(Inverted Index)

    MapReduce功能实现系列:       MapReduce功能实现一-Hbase和Hdfs之间数据相互转换       MapReduce功能实现二-排序       MapReduce功能实现 ...

  3. 正排索引(forward index)与倒排索引(inverted index)

    一.正排索引(前向索引) 正排索引也称为"前向索引".它是创建倒排索引的基础,具有以下字段. (1)LocalId字段(表中简称"Lid"):表示一个文档的局部 ...

  4. python 倒排索引(Inverted Index)

    倒排索引是一种检索方式,比如存入数据库的数据是存一篇文章进去,然而检索时我们经常需要通过关键词检索,所以提前做好倒排索引即可方便检索,而省略掉全表扫描的问题了,这是一种用空间换时间的方法. 使用字典构 ...

  5. ElasticSearch 学习笔记(一):倒排索引(Inverted index)

    分析一个术语,要先从名称入手 倒排索引,英文原名Inverted index,大概因为 Invert 有颠倒的意思,就被翻译成了倒排.但是倒排这个名称很容易让人理解为从A-Z颠倒成Z-A.个人觉得翻译 ...

  6. 斯坦福NLP笔记72 —— The Inverted Index

    2019独角兽企业重金招聘Python工程师标准>>> Inverted Index是信息抽取里最常用的数据结构,来看看他长啥样: Brutus指向数字X则代表X号文档中包含了Bru ...

  7. 【es】Elasticsearch:inverted index,doc_values及source

    文章目录 1.概述 2.Inverted index 3.Source 4.Doc_values 1.概述 转载:https://www.cnblogs.com/sanduzxcvbnm/p/1208 ...

  8. 反向索引(Inverted Index)

    转自:http://zhangyu8374.iteye.com/blog/86307 反向索引是一种索引结构,它存储了单词与单词自身在一个或多个文档中所在位置之间的映射.反向索引通常利用关联数组实现. ...

  9. inverted index

    Index是啥? 书后面的index实际上是inverted index,是用来查找的. 是一个词,出现在document的什么地方,page number.f(Word) returns a set ...

  10. Lucene Inverted index(倒排索引)原来快速入门

    Lucene是一个高性能的JAVA全文检索工具包,它使用的是倒排文件索引结构.该结构及相应的生成算法如下: 设有两篇文章1和2: 文章1的内容为:Tom lives in Guangzhou, I l ...

最新文章

  1. 返还网 PK 返利网*2
  2. 计算机桌面颜色如何设置标准,电脑调整桌面颜色设置_电脑桌面颜色设置
  3. 如何学习挖掘漏洞[参考多方面资料]
  4. 康普在金色一号中心缔造光纤新历史
  5. 字节字符区别Java_【JAVA基础】字符数组与字节数组的区别
  6. 「PKUSC2018」神仙的游戏 - 题解
  7. 漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?
  8. 20180513 实参 形参 数组
  9. IndexedDB 包装库 idb
  10. COSO企业风险管理综合框架主要关注8大层面的企业风险
  11. Could not enlist in transaction on entering meta-aware object!”
  12. 科比,老大1000天
  13. Latex Table 合并行/列详解
  14. Mac上重装PHP-7.3和apache-2.4.41
  15. C语言中的字符常量与变量
  16. 环球时报评出“影响新中国的60位外国人”
  17. AS:另一个程序正在使用此文件,进程无法访问。
  18. 【渝粤教育】电大中专计算机应用基础 (2)_1作业 题库
  19. 有什么好用的视频剪辑软件适合新人UP主
  20. 绕过Windows操作系统正版验证新方法

热门文章

  1. Assembly.CreateInstance()与Activator.CreateInstanc
  2. 数据库IO性能知识整理
  3. 负载均衡之LVS详解
  4. 向云上迁移数据时如何避免停机和中断
  5. Office WORD如何在图片上添加文字
  6. JS常用事件兼容性处理方法
  7. 第一阶段冲刺阶段项目总结
  8. PHP_变量什么情况下加大括号{}
  9. spring读取XML配置文件的三种方式
  10. 最全的c#日期函数 winform