搜索引擎-处理查询

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

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

1.查询流程

查询流程图:

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)进行了对齐。图中虚线箭头标出了查询处理计算的行进方向。

图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是一次一单词的运算机制图示说明,图中虚线箭头指示出了计算的行进方向,为了保存数据,在内存中使用哈希表来保存中间结果及最终计算结果。

图4-2是一次一单词

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

时间: 2024-08-28 05:39:55

搜索引擎-处理查询的相关文章

第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的查询

第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)的查询 elasticsearch(搜索引擎)的查询 elasticsearch是功能非常强大的搜索引擎,使用它的目的就是为了快速的查询到需要的数据 查询分类: 基本查询:使用elasticsearch内置的查询条件进行查询 组合查询:把多个查询条件组合在一起进行复合查询 过滤:查询同时,通过filter条件在不影响打分的情况下筛选数据

搜索引擎中查询纠错总结

搜索引擎是目前人们获取信息最重要的方式之一,其最基本最核心的功能是信息检索,找到含有关键字的网页或文档,然后按照一定排序将结果给出,在此基础之上,能够提供更多更复杂的功能来提升用户体验.对于一个成熟的搜索系统,用户看似简单的搜索过程,需要在系统中经过多个环节,多个模块协同工作,才能提供一个让人满意的搜索结果.在搜索引擎输入的查询中,有相当一部分是带输入错误的查询.而提交有错误的查询给搜索引擎,通常得不到好的搜索结果,返回结果数很少并且和用户的期待相差很远,会严重影响了用户的使用体验.因此查询纠错

【Query处理学习笔记】搜索引擎查询推荐技术综述_中文信息学报2010_王斌

主要内容:对通用搜索引擎的查询推荐技术的方法.评价进行了总结 具体内容: "查询推荐"的不同英文叫法:Query Suggestion.Term Suggestion.Query Recommendation.Query Substitution.Query Rewriting 查询推荐的任务:找出和用户查询相似的query,以便更好地表达用户查询意图,供用户便捷输入 三种技术方法: 1. 基于文档的方法:通过处理query搜索出来的文档,以此作为反馈,进一步理解用户意图,扩充quer

HBase多条件及分页查询的一些方法

HBase是Apache Hadoop生态系统中的重要一员,它的海量数据存储能力,超高的数据读写性能,以及优秀的可扩展性使之成为最受欢迎的NoSQL数据库之一.它超强的插入和读取性能与它的数据组织方式有着密切的关系,在逻辑上,HBase的表数据按RowKey进行字典排序, RowKey实际上是数据表的一级索引(Primary Index),由于HBase本身没有二级索引(Secondary Index)机制,基于索引检索数据只能单纯地依靠RowKey.也只有使用RowKey查询数据才能得到非常高

搜索引擎原理

在浩如烟海的Internet上,特别是其上的Web(World Wide Web万维网)上,不会搜索,就不会上网.网虫朋友们,你了解搜索引擎吗?它们是怎么工作的?你都使用哪些搜索引擎?今天我就和大家聊聊搜索引擎的话题. 一.搜索引擎的分类 获得站点网页资料,能够建立数据库并提供查询的系统,我们都能够把它叫做搜索引擎.依照工作原理的不同,能够把它们分为两个基本类别:全文搜索引擎(FullText Search Engine)和分类文件夹Directory). 全文搜索引擎的数据库是依靠一个叫“网络

100 个极其有用的搜索引擎

转载:http://huzhenjie.blog.51cto.com/863711/816772 搜索博客.游戏及论坛文章. Bloglines: 从该搜索引擎你可以查询到2003年至今世界各地的博客文章. FindSounds: 网页设计师和拖拉学生通过该网站可以查找到各种不同格式.信号源个数及分辨率的音频文件. Nicado: 该免费搜索引擎可以帮助你查询你很久未曾联系的老朋友或家庭成员的e-mail 地址及电话号码. Omgili: 通过关键词或主题查找你感兴趣的论坛文章及话题. (快速)

[转载] 开源搜索引擎的比较(五)

开源搜索引擎的比较(五) 5.3整体评估 基于以上结果,本文在不同的文档集合上进行了实验, 搜索引擎建索引的时间开销较小的是ht://Dig, Indri, IXE, Lucene, MG4J, Swish-E, Swish++, Terrier, XMLSearch, 和 Zettair.而建索引后的存储大小的分析,可以分为三种类型,Lucene, MG4J, Swish-E, Swish++, XMLSearch 和 Zettair 的索引的大小是数据集大 小的25%-35%. 而Terri

Google搜索排名优化-面向搜索引擎的网站设计

内容摘要:网站在搜索营销方面最主要的缺点: 行业知识:不知道搜索引擎对吸引的新用户的重要性,在搜索引擎排名服务中追求“傻瓜相关”,购买一些其实没有太多实际意义的行业关键词.其实能够用户输入的关键词越多,其目标性越强,这样的客户价值越高.用户能够直接定位到产品具体内容页比到网站首页有价值的多: 发布技术:网站的网页进入Google的索引量非常小,主要是由于大量使用动态网页造成的.需要将动态页面链接改写成静态 链接: 页面设计:页面标题重复,关键词不突出,过渡使用JavaScript脚本/图片/Fl

这就是搜索引擎--读书笔记三

前言 考虑到上次的网络爬虫总结一文对基础的知识还没有介绍完整,所以今天花一点时间来补充上次的网络爬虫基础知识.这次给大家总结了两个方面的内容:暗网抓取和分布式爬虫.希望对阅读本文的博友们有所收获. 暗网抓取 物理学研究表明,在目前宇宙所有物质的总体质量中,星系等可见物质占其中的20%,不可探测的暗物质占据了总质量的80%.互联网中暗网可以与宇宙的暗物质相类比,而其所占网页的比例,更是远大于暗物质占宇宙质量的比例,大约百倍于目前的明网网页. 什么是暗网 所谓暗网,是指目前搜索引擎爬虫按照常规方式很