搜索引擎-处理查询

 我们从用户的角度来看,用户不关心什么索引结构是倒排还是签名文件,也不需要知道相关排序算法。用户提交了查询,就需要获取满意的搜索结果。这个搜索结果就是搜索引擎是否提供有效的服务。

1.查询流程

查询流程图:

1.jpg

1)用户提交查询

2)分析查询

     查询预处理:

     1. 一般过滤掉助词或者标点符号之类,如中文的“的”,英文'The' . 另外对中文做分词处理获取检索组合,

     2)对于中文等搜索,需要分词。

     3)单词去重等。但是不同的搜索引起处理方式可能不一样。

    查询词格式化:

    把词汇转换成wordID

3)  根据查询词从倒排索引库获取匹配的检索结果

4)根据特定相关度排序算法进行排序,生成最后搜索结果。

当然了,这个流程还会涉及到缓存的过程。

我们主要说明第3步和第4步的内容:

       第3步是基于倒排索引的查询处理。即对已生成的倒排索引,处理其中的数据产生查询结果。

      第4步就是相关度排序算法了,由相关检索理论模型来决定。

      搜索引擎的信息查询一般都是遵循一定的理论模型,最常用的主要有布尔模型,向量模型,概率检索模型,语言模型,机器学习模型等。在搜索引擎中,需要考虑更多的因素才能为用户提供更符合的结果,广泛的采用了向量模型。实际的搜索引擎查询实现方法一般采用了向量检索模型和布尔模型相结合的方式。

       目前机器学习模型逐渐流行起来。前baidu科学家 张栋是这方面的专家(weibo:http://weibo.com/machinelearning)。据说360推出的搜索有两套系统,一套是360搜索团队研发的,另外一套是张栋研发的,张栋研发的这套搜索系统的检索模型应该是基于机器学习的。

      这检索模型后面在做介绍。我们这里简单说明查询处理机制。

2. 基于索引的查询处理

  目前有两种常见的查询处理机制和跳跃指针的结构化查询优化:

   2.1 一次一文档 (Document at a time)

   2.2 一次一单词 (Term at a time)

   2.3 结构化查询,即跳跃指针。

   下面详细说明这些机制。举个例子:

    假设用户输入“搜索引擎 技术” 而“搜索引擎”这个Term对应的倒排列表文档 DocID一次为{1,3,4},“技术” Term对应的倒排列表中文档DocID列表为{1,2,4} 我们从中可以看出同时包含整个查询的文档是{1,4}.

3. 一次一文档 (Document at a time)

        搜索引擎接收到用户的査询后,首先将两个单词的倒排列表从磁盘读入内存。所谓的一次一文档,就是以倒排列表中包含的文档为单位每次将其中某个文档与査询的最终相似性得分 计算完毕,然后开始计算另外一个文档的最终得分,直到所有文档的得分都计算完毕为止。

        图3-1是一次一文档的计算机制示意图,为了便于理解,圈中对于两个单词的倒排列表 中的公共文档(文档1和文档4)进行了对齐。图中虚线箭头标出了查询处理计算的行进方向。

      2.jpg

                                                          图3-1 —次一文档

处理流程:                                                                           

       1)  对于文档1来说,因为两个单词的倒排列表中都包含这个文档,所以可以根据各自的TF和IDF等参数计算文档和查询单词的相似性(具体相似性计算有很多种,此处对相似性计算做了简化处理,TF * IDF就是分数),之后将两个分数相加获得了文档1和用户查询的相似性得分: IDF=2, TF=2 , Score=4。
       2)  随后搜索系统开始处理文档2, 因为文档2只在"技术"这个词汇的倒排列表中,所以 根据相应的TF和IDF计算相似性后,即可得出文挡2和用户查询的相似性得分。
       3)  用类似的方 法依次处理文档3和文档4。
       4)  所有文档都计算完毕后,根据文档得分进行大小排序,输出得分 最闻的K个文档作为搜索结果输出,即完成了一次用户查询的响应。 

            结果的排序:D4,D1,D3,D4 

       因为搜索系统的输出结果往往是限定个数的,比如指定输出10个结果,所以在实际实现 一次一文档方式时,不必保存所有文档的相关性得分,而只需要在内存中维护一个大小为K 的优先级别队列,用来保存目前计算过程中得分最高的k个文档即可,这样可以节省内存和计 算时间,一般会采用根堆数据结构来实现这个优先级别队列,在计算结束时,按照得分大小输出就可以实现搜索目标。

4. 一次一单词 (Term at a time)

       一次一单词的计算过程与一次一文档不同:
        一次一文档可以直观理解为在单词一文档矩阵中,以文档为单位,纵向进行分数累计,之后移动到后续文档接着计算,即计算过程是"先纵 向再横向";
       而一次一单词则是来取"先横向再纵向"的方式,即首先将某个单词对应的倒排 列表中的每个文档ID都计算一个部分相似性得分,也就是说,在单词一文档矩阵中首先进行 横向移动,在计算完毕某个单词倒排列表中包含的所有文档后,接着计算下一个单词倒排列表 中包含的文档ID, 即进行纵向计算,如果发现某个文档m已经有了得分,则在原先得分基础 上进行累加。当所有单词都处理完毕后,每个文档最终的相似性得分计算结束,之后按照大小 排序,输出得分最高的乂个文档作为搜索结果。
    图4-2是一次一单词的运算机制图示说明,图中虚线箭头指示出了计算的行进方向,为了保存数据,在内存中使用哈希表来保存中间结果及最终计算结果。

3.jpg

                            图4-2是一次一单词

处理流程:           
       1)搜索系统首先对包含"搜索引擎"的所有文档进行部分得分计算,比如对于文档1, 可以根据TF和1DF等参数计算这个文档对"搜索引擎"这个查询词的相似性得分,之后根据文档ID在哈希表中查找,并把相似性得分保存在哈希表中。
       2)依次对文档3和文档4进行类似的计算。
       3)当"搜索引擎"这个单词 的所有文档都计算完毕后,开始计算"技术"这个单词的相似性得分,对于文档1来说,同样 地,根据TF和IDF等参数计算文档1和"技术"这个单词的相似性得分,之后查找哈希表, 发现文档1已经存在得分("搜索引擎"这个单词和文档1的相似性得分),则将哈希表对应的 得分和刚刚计算出的得分相加作为最终得分,并更新哈希表中文档1对应的得分分值,获得了 文档1和用户查询最终的相似性得分,
       4)之后以类似的方法,依次计算文档2和文档4的得分。 
       5)当全部计算完毕时,哈希表中存储了每个文档和用户査询的最终相似性得化排序后输出得分 最高的K个文档作为搜索结果。

转自:http://blog.csdn.net/hguisu/article/details/7978451

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/2733

(0)
s19930811s19930811
上一篇 2015-12-10 11:08
下一篇 2015-12-10 11:08

相关推荐

  • Linux基础知识(二)

     本文的主要内容是:  1.Linux上的基本文件管理命令  2bash的特性及其命令状态返回值  3.bash的花括号展开机制  4.文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息  5如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?  &nb…

    Linux干货 2016-09-25
  • Btrfs文件系统在CentOS中的应用

      Btrfs作为Linux下一代文件系统与zfs有着许多相似的功能。 扩展性 (scalability) 相关的特性,btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。 Extent,B-Tree 和动态 inode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。 其次是数据一…

    Linux干货 2016-01-20
  • N25_第二周作业

    前言 我们这次使用HAProxy作为负载均衡调度器来实现后端httpd服务的负载均衡和动静分离,实现将来自用户的80端口的http请求转发只后端8080端口的server服务 HAProxy介绍 HAProxy的是一个免费的,非常快速和可靠的解决方案,提供高可用性,负载均衡和代理对TCP和HTTP的应用程序。它特别适用于非常高流量网站。多年来,它已成为标准的…

    Linux干货 2016-12-12
  • 第三周作业

      1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | cut -d" " -f1 | sort -u who | cut -d" " -f1 | uniq 2、取出最后登录到当前系统的用户的相关信息。    who | tail -1 …

    Linux干货 2016-11-19
  • Linxu系统的启动过程

    Linxu系统的启动过程 启动流程 1、引导Linux启动是从BIOS中的地址0xFFFF0处开始的,BIOS由两部分组成:POST代码和运行时服务,运行时服务是为操作系统提供一些接口,如温度检测等。 BIOS的第一个步骤是加电自检(POST),完成对硬件的的检测,如某些硬件出现错误无法通过检测就导致系统无法启动,POST完成之后将被清出内存; BIOS的第…

    Linux干货 2016-09-13
  • LVM 2 介绍以及怎么使用?

    一、 LVM是什么? LVM利用Linux内核的device-mapper来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间, without getting caught up …

    Linux干货 2017-01-06