aihot  2020-11-12 11:21:28  OpenCV |   查看评论   

  为了解决这个问题,我们放弃哈希取模方式,转而采用一致性哈希方法来确定服务器的分工。

  一致性哈希方法将网页的主域名进行哈希,映射为一个范围在0到2^23之间的某个数值,并认为0和最大值重合,将其看做有序的环状序列。每个服务器负责这个环状序列的一个片段,并且,如果某台服务器除了问题,那么本该由这台服务器负责的URL由顺时针的下一台服务器接管,并不会对其它服务器的任务造成影响。

搜索引擎索引

  索引是搜素引擎最重要的核心技术之一,搜索引擎的索引其实就是实现单词-文档矩阵的具体数据结构表示,可以采用不同的方式来表示单词与文档之间的包含关系,比如倒排索引、签名文件、后缀树等方式,但倒排索引经实验证明是最佳的映射关系实现方式。

倒排列表

  我们首先利用分词系统将文档自动切分成单词序列,这样每个文档就转换为由单词序列组成的数据流。然后我们为每个不同的单词赋予唯一的单词编号,同时记录下哪些文档包含这个单词,如此处理结束后,我们可以得到最简单的倒排列表。

  这只是最简单的倒排列表,只是记录了哪些文档包含了这个单词,除此之外,还可以记录单词在对应文档内的词频信息、出现位置和文档频率。词频就是TF-IDF中的TF,而文档频率就是TF-IDF中的DF,也即多少个文档包含某个单词。

  在实际的搜索引擎系统中,也并不存储倒排索引项中的实际文档编号,而是代之以文档编号差值(D-Gap),文档编号差值是倒排表中相邻的两个倒排索引项文档编号的差值,一般这些编号差值都是大于0的整数。

单词词典

  单词词典是倒排索引中非常重要的组成部分,它用来维护文档中出现过的所有单词的相关信息,并记载某个单词对应的倒排列表在倒排文件中的位置信息。

哈希加链表

哈希加链表词典结构

哈希加链表词典结构

  这种词典结构主要由哈希表和冲突链表组成,冲突链表的存在是因为单词的哈希值可能会有冲突。我们根据函数的哈希值找到单词在哈希表中的位置,表中会给出冲突表的指针,在冲突表中单词的对应位置可以读出其对应的倒排列表。

树形结构

  B+树是另外一种高效查找结构,它需要词典项能够按照大小排序(数字或字符序)。B+树形成了层级查找结构,中间节点不保存内容,只用于指出一定顺序范围内的词典项目存储在哪个子树中,起到依据词典项比较大小进行导航的作用。最底层的叶子节点存储内容信息。

建立索引

两遍文档遍历法

  这种方法完全在内存里完成索引的创建过程。

  第一遍文档遍历的时候,并不立即开始建立索引,而是收集一些全局的统计信息。比如文档集合中包含的文档个数,文档集合所包含的不同单词个数,每个单词在多少个文档中出现过。将所有单词对应的文档频率(DF)值全部相加,就可以知道建立最终索引所需的内存大小是多少,于是在内存中分配足够大的空间用于存储倒排索引内容。第一遍文档遍历主要做些资源准备工作。

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自浅谈搜索引擎基础(上)

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]