倒排索引原理,即为什么叫倒排索引

倒排索引的英文原名是Inverted index,大概因为Invert有颠倒的意思,所以就被翻译成了倒排,然后我们就会在字面上出现误解:理解为从A-Z颠倒成Z-A。其实它并不是字面上的意思。

倒排索引源于实际应用中需要根据属性的值来查找记录,也就是说,不是由记录来确定属性值,而是由属性值来确定记录,因而称为倒排索引

建立全文索引中有两项非常重要,一个是如何对文本进行分词,一是建立索引的数据结构。分词的方法基本上是二元分词法、最大匹配法和统计方法。索引的数据结构基本上采用倒排索引的结构,lucene就是基于倒排索引来实现的。其索引表中的每一项都包括一个属性值和具有该属性值的各记录id或地址。

带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)

倒排索引一般表示为一个三元组:关键词、词频(出现的次数)、id或位置(出现在哪篇文章或网页中,及有关的日期,作者等信息)。它相当于为所有文档或者互联网上几千亿页网页做了一个索引。可以理解为打标签,所以我们只需根据标签就能快速匹配到对应文档或网页。

一个未经处理的数据库中,一般是以文档ID作为索引,以文档内容作为记录。

而Inverted index 是将单词作为索引,将文档ID作为记录,这样便可以方便地通过单词或记录查找到其所在的文档。

步骤1)读取一整条句子到变量str中

步骤2)从句子的尾端读取1个字到变量word(单词)中

步骤3)在字典查找word中保存的单词。如果不存在则保存word并转到步骤4,否则转到步骤5

步骤4)如果是字典中最大单词或者超过最大单词数(认定为新词),从句尾去掉该单词,返回步骤2

步骤5)继续读取前一个字到word中,转到步骤3

 

倒排索引原理,即为什么叫倒排索引_第1张图片

 

内存中单词采用层次结构保存。假设字典中有如下的单词:中国 中华民国 国家 人民 民主

在内存中按照如下方式按层排列,其中每一个方块代表一个字,箭头所指向为该单词的前一个字

举例说明:假如现有三份数据文档,文档的内容如下分别是:

doc1:Java is the best programming language.

doc2:PHP is the best programming language.

doc3:Javascript is the best programming language.

创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档

倒排索引原理,即为什么叫倒排索引_第2张图片

再将上面的内容转换为图的形式来说明倒排索引的结构信息:

倒排索引原理,即为什么叫倒排索引_第3张图片

 

Lucene倒排索引原理见: https://blog.csdn.net/Trisyp/article/details/108099087

 

你可能感兴趣的:(ElasticSearch,NLP,倒排索引,索引,数据结构,elasticsearch)