倒排索引

非原创,内容源自:
https://zhuanlan.zhihu.com/p/139041529

https://www.cnblogs.com/zlslch/p/6440114.html

1 过程

假设只有5个网站:

内容分词,形成 “倒排列表”,放在磁盘中,调用时调入内存

倒排列表:

DocID分词出现的 文档编号
TF分词在该文档 出现的次数
<POS>分词在该文档 出现的位置

百度会参考:
热度、你的搜索记录,网站给的钱等等综合打分,按评分高低返回 排好序的搜索结果

世界上有亿万文档,此时怎么找的更快,更准,这需要算法

2 出现的问题

2.1 问题1 - 哈希冲突

解决冲突:冲突表,也是链表,链表过长用 红黑树,b树代替

b树:

2.2 问题2 - 文件太多

文档的数量庞大

2.3 问题3 - 读取文档

如何从磁盘中读取文档
1 两次遍历法
2 排序法

2.3.1 两次遍历法 ( 空间换时间 )

第 1 遍:确定要开辟多大的内存来显示文档
第 2 遍:边扫描,边匹配对应的文档编号(三元组中的第 1 个数),载入内存

具体:
第 1 遍:扫描文档,找到文档数量N, 文档集合内 包含的不同单词数M 和 每个单词出现的频率DF

不足
文档集合有多大,内存就有多大,很可能内存溢出

2.3.2 排序法 ( 时间换空间 )

首先:内存大小是固定的

解析文档,构造(单词ID,文档ID,单词频率)三元组 - 排序,按单词ID,文档ID,单词频率先后排
若内存满了,将这些三元组写入临时文件A中,但词典一直在内存中!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值