Abstract variable
perface
Actual variables
搜索引擎
搜索引擎及其架构
为什么需要搜索引擎,搜索引擎为什么重要
搜索引擎经历了什么发展
搜索引擎的架构
一般就是网络爬虫从网络中将数据爬到,解析相关的数据进行去重后存储,将数据内容按照倒排索引存储好,还有网络的相关性也要存储,
而这些都是存储到hadoop等存储引擎上的。当用户发送请求过来,需要对查询词查询其真正的意图,然后根据用户的意图命中缓存,如果命中不了就要从排序模块中获得最相关的内容,再去存储引擎中的详情接口中去取数据。
子主题 2
网络爬虫
索引基础
索引就是提供快速搜索内容的关键字。正排索引是类似b+树,根据内容快速的检索到内容。而对于文档这种用户根据关键字进行搜索,匹配文档的需求,需要进行倒排索引
也就是以关键字为核心去表示文档。例如我们几句话,用单词作为倒排索引的话:文档id、单词出现次数、和位置共同组合倒排索引
而这个倒排索引所采用的具体存储结构有很多。
单词词典就是所有文档出现的单词统计,一般词典要非常的全。一般词典存储的结构就是哈希冲突链表、b+树,
倒排列表就是一个单词,后面存储单词对应文档的索引项,非常多,一般采用差值排列,可以更好的对数据进行压缩。
建立索引是通过好几种方式,一种是两遍文档迪历方法、第一一遍统计一个单词出现的文档数量,从而获取最终约内存大小),、第二遍统计每个文档中出现的次数,“这样最终落地到磁盘当中就是建立索引的过程,此外这样
做的内存占用比较大,一股还有归并的方式,
此外还有一个问题就是如何建立动态索引,前面我们建立的都是静态的存储在顶盘,我们需要额外创建一个实时索引存储在内存,还有一个删除表的文档表、这样一次用户的查询过来、我们先去的索引和临时索引中合并,结果
然后去删除表中过滤, 就可以做到实时的检索。
索引更新策略
查询处理
具体用户一个查询过来,我们怎么处理的呢2一般就是将用户的查询词对应的倒排列表加载到内存中,然后通过词频率等参数计算这个文档的得分,输入到一个k纬度的优先队列进行维护只保存前k个文档.
而日很多时候对于用户的多个词、需要命中多个词纳交集,在子算的过程中可以进行加速,例如将之前的数据进行切。切割多个块进行加速,每次只需要解压一个索引差值表、读取里面的文档id进行求交集.
多字段索引
短语查询
分布式部署
检索压缩
对于词典数据和索引列表一般都是会进行压缩的。对于词典数据我们可以存储地址而不是具体内容,因为很多单
词的大小不一致,我们只存地址,额外用一个地方单独存储数据。对于索引列表中的数据,我们可以使用一元编码加二元编码组合的方式对词频率进行压缩,因为词频率差距非常大。
文档聚类
静态索引裁剪
检索模型
这个是搜索的核心,其目的主要对用户媸索的内容匹配出最需要的内容,但是最需要的内容已经通过意图识别找到了,因此不再德里的讨论范围内我们默认在这个模块我们已经知道了用户的真正甥索词,要知道具体的内容了。这时候需要用几种算法来计算这也是搜索的核心,
检索模型
布尔检索
向量空间
概率模型
语言模型
机器学习模型
评价指标
链接分析
存储系统
云存储的需求
数据的模型和理论基础
常见的解决方案
反作弊分析和网页去重
意图识别
init()