搜索引擎基础概念(3)—— 倒排列表

  倒排列表

    倒排列表用来记录有哪些文档包含了某个单词。一般在文档集合里会有很多文档包含某个单词,每个文档 会记录文档编号(DocID),单词在这个文档中出现的次数(TF)及单词在文档中哪些位置出现过等信息,这样与一个文档相关的信息被称做倒排索引项(Posting),包含这个单词的一 系列倒排索引项形成了列表结构,这就是某个单词对应的倒排列表。图 1-1 是倒排列表的示意图,在文档集合中出现过的所有单词及其对应的倒排列表组成了倒排索引。

图1-1 倒排列表示意图

    在实际的搜索引擎系统中,并不存储倒排索引项中的实际文档编号,而是代之以文档编号差 值(D-Gap)。文档编号差值是倒排列表中相邻的两个倒排索引项文档编号的差值,一般在索引构建过程中,可以保证倒排列表中后面出现的文档编号大于之前出现的文档编号,所以文档编号差值总是大于 0 的整数。如图 1-10 所示的例子中,原始的 3 个文档编号分别是 187、196 和 199,通过编号差值计算,在实际存储的时候就转化成了:187、9、3。

图1-2 文档编号差值示例

    之所以要对文档编号进行差值计算,主要原因是为了更好地对数据进行压缩,原始文档编号一般都是大数值,通过差值计算,就有效地将大数值转换为了小数值,而这有助于增加数据的压缩率。

原文地址:https://www.cnblogs.com/yaokaizhi/p/9744230.html

时间: 2024-11-06 03:50:18

搜索引擎基础概念(3)—— 倒排列表的相关文章

这就是搜索引擎--读书笔记七--倒排列表压缩算法

倒排列表压缩算法 目前有很多种倒排列表算法可以选择,但是我们对评判算法的优劣需要定量指标.一般会考虑3个指标:压缩率.压缩速度以及解压速度. 压缩率是指数据压缩前和压缩后大小的比例,显然,压缩率越高,就越节约磁盘空间.而压缩速度是压缩单位量的数据所花的时间,但是压缩往往是在建立索引过程中进行的,这是一个后台进行的过程,不需要及时响应用户查询,即使速度慢一些也没有关系.所以普遍来说,压缩速度不是一个重要指标. 那么我们来看看解压速度.顾名思义,解压就是将压缩数据恢复到原始数据.这是一个实时响应过程

搜索引擎基础概念(1)——倒排索引

" 吾有三剑,唯子所择:皆不能杀人,且先言其状.一曰含光,视之不可见,运之不知有.其所触也,泯然无际,经物而物不觉.二曰承影,将旦昧爽之交,日夕昏明之际,北面而察之,淡淡焉若有物存,莫识其状.其所触也,窃窃然有声,经物而物不疾也.三曰宵练,方昼则见影而不见光,方夜见光而不见形.其触物也,騞然而过,随过随合,觉疾而不血刃焉.此三宝者,传之十三世矣,而无施于事.匣而藏之,未尝启封." -- <列子·汤问> 倒排索引(Inverted Index):倒排索引是搜索引擎数据存储的结

搜索引擎基础概念(2)—— 构建单词词典

Lucene单词词典 使用lucene进行查询不可避免都会使用到其提供的单词词典功能,即根据给定的term找到该term所对应的倒排文档id列表等信息.实际上lucene索引文件后缀名为tim和tip的文件实现的就是lucene的单词词典功能. 怎么实现一个单词词典呢?我们马上想到排序数组,即term字典是一个已经按字母顺序排序好的数组,数组每一项存放着term和对应的倒排文档id列表.每次载入索引的时候只要将term数组载入内存,通过二分查找即可.这种方法查询时间复杂度为Log(N),N指的是

倒排列表压缩算法汇总——分区Elias-Fano编码貌似是最牛叉的啊!

来看看倒排索引压缩.压缩是拿CPU换IO的最重要手段之一,不论索引是放在硬盘还是内存中.索引压缩的算法有几十种,跟文本压缩不同,索引压缩算法不仅仅需要考虑压缩率,更要考虑压缩和解压性能,否则会解压太慢而起不到CPU换IO的作用.早期的索引设计里,在尝试了几十种编码之后,基本都确定性采用差分编码+可变长字节编码.差分的目的在于让索引的文档ID尽可能小,因为压缩小的整数总是比大整数更有效.在索引构建算法中,有一类工作叫做"文档重排",目的就是通过对文档索引顺序的重新排列,使得索引posti

Poseidon 系统是一个日志搜索平台——认证看链接ppt,本质是索引的倒排列表和原始日志数据都存在HDFS,而文档和倒排的元数据都在NOSQL里,同时针对单个filed都使用了独立索引,使用MR来索引和搜索

Poseidon 系统是一个日志搜索平台,可以在百万亿条.100PB 大小的日志数据中快速分析和检索.360 公司是一个安全公司,在追踪 APT(高级持续威胁)事件,经常需要在海量的历史日志数据中检索某些信息,例如某个恶意样本在某个时间段内的活动情况.在 Poseidon 系统出现之前,都是写 Map/Reduce 计算任务在 Hadoop 集群中做计算,一次任务所需的计算时间从数小时到数天不等,大大制约了 APT 事件的追踪效率.Poseidon 系统就是解决这个需求,能在数百万亿条规模的数据

ES里设置索引中倒排列表仅仅存文档ID

index_options The index_options parameter controls what information is added to the inverted index, for search and highlighting purposes. It accepts the following settings: docs Only the doc number is indexed. Can answer the question Does this term e

倒排列表求交集算法 包括baeza yates的交集算法

#ifndef __INTERSECT_HPP__ #define __INTERSECT_HPP__ #include "probe.hpp" namespace themas { /* * like stl's set_intersect */ template<class InputIterator, class OutputIterator> void linear_intersect(InputIterator begin1, InputIterator end1

倒排列表求交集算法汇总

http://bbs.sjtu.edu.cn/bbstcon,board,Algorithm,reid,1225812893.html 我总结了一下,归纳如下: 1.1 SvS and Swapping SvS Algorithm 1 Pseudo-code for SvS SvS(set, k) 1: Sort the sets by size (|set[0]| ≤ |set[1]| ≤ . . . ≤ |set[k]|). 2: Let the smallest set s[0] be t

倒排表数据结构、通配符查询、拼写纠正详解

目录: Dictionary Data Structure  词典数据结构 Wild-Card Query  通配符查询 Spelling Correction  拼写纠正 搜索引擎里的dictionary data通常存储着这些信息: 索引词(term vocabulary). 文档频率(document frequency,即这个词在多少个文档里出现). 指向倒排表的指针(pointers to each postings list ). 那么,他是怎样的一个数据结构呢? 一种非常naive