倒排索引(reverted index)的初步了解

本文介绍了倒排索引的建立过程,包括文档分析、词项去重和倒排列表生成,以及倒排记录表的合并算法,用于布尔检索。通过实例展示了如何使用倒排索引处理查询,探讨了线性合并算法的时间复杂度。
摘要由CSDN通过智能技术生成

布尔检索和倒排索引的实验:
1. 掌握倒排索引(reverted index)的建立过程
2. 掌握倒排记录表(postings lists)合并算法

倒排索引(reverted index)的建立过程

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)
词项(term)是索引的单位,它通常可以用词来表示。每个词项都有一个记录出现该词项的所有文档的列表,该表中的每个元素记录的是词项在某文档中的一次出现信息,这个表中的每个元素通常称为倒排记录(posting)。每个词项对应的整个表称为倒排记录表(posting list)倒排表(invertedlist)。所有词项的倒排记录表一起构成全体倒排记录表(postings)
简单法
流程描述如下:
1)将文档分析称单词term标记,
2)使用hash去重单词term
  3)对单词生成倒排列表
  倒排列表就是文档编号DocID,没有包含其他的信息(如词频,单词位置等),这就是简单的索引。
  这个简单索引功能可以用于小数据,例如索引几千个文档。然而它有两点限制:
  1)需要有足够的内存来存储倒排表,对于搜索引擎来说, 都是G级别数据,特别是当规模不断扩大时 ,我们根本不可能提供这么多的内存。
  2)算法是顺序执行,不便于并行处理。
  
一个简单的小例子,现有两个文档,分别命名为1.txt和2.txt,1.txt中的内容为:
I did enact Julius Caesar:I was killed i’ the Capitol;Brutus killed me.  
2.txt中的内容为:
So let it be with Caesar.The noble Brutus hath told you Caesar was ambitious:
下图将让你对倒排索引有简单的认识
这里写图片描述

通过排序和合并建立倒排索引的过程。每篇文档的所有词项加上文档ID(图左部)通过按照字母
顺序排序(图中部)。然后,同一词项进行合并。最后,将词项和文档ID 分开(图右部)。词项存
储在词典中,每个词项有一个指针指向倒排记录表。词典中往往还会存储一些其他的概要信息,
如这里所存储的每个词项的文档频率。这个信息可以用于提高查询执行时的时间效率,也会应用
于后面要讨论的结果排序中的权重计算方法。每个倒排记录表存储了词项出现的文档列表,也可
以存储一些其他信息,比如词项频率(term frequency,即词项在文档中出现的次数)和词项在文
档中出现的位置。

package test1;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

class DictNode{    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值