搜索引擎技术的概要以及相关知识

1)影响百度排名的几个因素java

第一个因素,URL路径存在的时间长短。web

url的长短对搜索引擎仍是有影响的,因此在作优化的时候要注意把url尽可能作的短一点,对优化颇有好处。

第二个因素,关键词出现的次数。
关键词出现的次数直接影响到你的这篇文章是否是跟你的主题相关的问题,因此你想优化哪一个关键词你就把这个词在这篇文章中出现的次数多一点,首段要出现,而后其余段要出现,最后一段要出现,就能够了。

第三个因素,关键词内容的丰富性。
咱们来看,内容越丰富的,关键词排名就越靠前,固然咱们说的内容丰富要结合关键词的相关性来讲,不能你乱写内容,写一些无关的词对于排名是有害的。而是一个信息你要准确的提供用户,要全面的提供给用户,因此你要尽可能把这个关键词主题的每个面的内容都描述出来,这样才合理。

第四个因素,页面的更新频率。

页面的更新频率也很是重要,咱们发现排名靠前的都是更新频率比较稳定的。百度对于页面稳定更新给予了权重的。算法

 二)搜素引擎技术概要数据库

前言

    近些天在学校静心复习功课与梳理思路(找工做的事情暂缓),趁闲暇之际,常看有关搜索引擎相关技术类的文章,接触到很多此前不曾触碰到的诸多概念与技术,如爬虫,网页抓取,分词,索引,查询,排序等等,更惊叹于每一幅精彩的架构图,特此,便有记录下来的冲动,以做备忘。编程

    本文从最基本的搜索引擎的概念谈起,到全文检索的概念,由网络蜘蛛,分词技术,系统架构,排序的讲解(结合google搜索引擎的技术原理),然后到图片搜索的原理,最终以几个开源搜索引擎软件的介绍结束全文。api

    因为本文初次接触此类有关搜索引擎的技术,参考了互联网上诸多牛人的文章与做品,有不妥之处,还望诸君海涵。再者因本人见识浅薄,才疏学浅,有任何问题或错误,欢迎不吝指正。同时,正式进军搜索引擎领域的学习与研究。谢谢。安全

一、什么是搜索引擎

    搜索引擎指自动从因特网搜集信息,通过必定整理之后,提供给用户进行查询的系统。因特网上的信息浩瀚万千,并且毫无秩序,全部的信息像汪洋上的一个个小岛,网页连接是这些小岛之间纵横交错的桥梁,而搜索引擎,则为用户绘制一幅一目了然的信息地图,供用户随时查阅。服务器

    搜索引擎的工做原理以最简单的语言描述,便是:网络

  1. 搜集信息:首先经过一个称为网络蜘蛛的机器人程序来追踪互联网上每个网页的超连接,因为互联网上每个网页都不是单独存在的(必存在到其它网页的连接),而后这个机器人程序便由原始网页连接到其它网页,一链十,十链百,至此,网络蜘蛛便爬满了绝大多数网页。
  2. 整理信息:搜索引擎整理信息的过程称为“建立索引”。搜索引擎不只要保存搜集起来的信息,还要将它们按照必定的规则进行编排。这样,搜索引擎根本不用从新翻查它全部保存的信息而迅速找到所要的资料。
  3. 接受查询:用户向搜索引擎发出查询,搜索引擎接受查询并向用户返回资料。搜索引擎每时每刻都要接到来自大量用户的几乎是同时发出的查询,它按照每一个用户的要求检查本身的索引,在极短期内找到用户须要的资料,并返回给用户。
    整理信息及接受查询的过程,大量应用了文本信息检索技术,并根据网络超文本的特色,引入了更多的信息。接下来,下文便由网络蜘蛛,分词技术,到系统架构,排序一一介绍。

二、网络蜘蛛

    网络蜘蛛即Web Spider,是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是经过网页的连接地址来寻找网页,从网站某一个页面(一般是首页)开始,读取网页的内容,找到在网页中的其它连接地址,而后经过这些连接地址寻找下一个网页,这样一直循环下去,直到把这个网站全部的网页都抓取完为止。若是把整个互联网当成一个网站,那么网络蜘蛛就能够用这个原理把互联网上全部的网页都抓取下来。架构

    在抓取网页的时候,网络蜘蛛通常有两种策略:广度优先和深度优先(以下图所示)。广度优先是指网络蜘蛛会先抓取起始网页中连接的全部网页,而后再选择其中的一个连接网页,继续抓取在此网页中连接的全部网页。这是最经常使用的方式,由于这个方法可让网络蜘蛛并行处理,提升其抓取速度。深度优先是指网络蜘蛛会从起始页开始,一个连接一个连接跟踪下去,处理完这条线路以后再转入下一个起始页,继续跟踪连接。这个方法有个优势是网络蜘蛛在设计的时候比较容易。至于两种策略的区别,下图的说明会更加明确。


    因为不可能抓取全部的网页,有些网络蜘蛛对一些不过重要的网站,设置了访问的层数。例如,在上图中,A为起始网页,属于0层,B、C、D、E、F属于第1层,G、H属于第2层,I属于第3层。若是网络蜘蛛设置的访问层数为2的话,网页I是不会被访问到的。这也让有些网站上一部分网页可以在搜索引擎上搜索到,另一部分不能被搜索到。 对于网站设计者来讲,扁平化的网站结构设计有助于搜索引擎抓取其更多的网页。

三、中文分词

    下图是我无聊之际,在百度,谷歌,有道,搜狗,搜搜,雅虎中搜索:结构之法的搜索结果比较(读者能够永久在百度或谷歌中搜索:结构之法4个字,便可进入本博客):

    从上图能够看出,百度,谷歌,搜狗,搜搜,雅虎都在第一个选项连接到了本博客--结构之法算法之道,从上面的搜索结果来看,百度给的结果是最令我满意的(几个月前,谷歌的搜索结果是最好的),其次是雅虎英文搜索,谷歌,而有道的搜索结果则差强人意。是什么影响了这些搜索引擎搜索的质量与相关性的程度呢?答曰:中文分词。下面,我们来具体了解什么是中文分词技术。

    中文分词技术属于天然语言处理技术范畴,对于一句话,人能够经过本身的知识来明白哪些是词,哪些不是词,但如何让计算机也能理解?其处理过程就是分词算法。
    现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。

    一、基于字符串匹配的分词方法
    这种方法又叫作机械分词方法,它是按照必定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不一样,串匹配分词方法能够分为正向匹配和逆向匹配;按照不一样长度优先匹配的状况,能够分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又能够分为单纯分词方法和分词与标注相结合的一体化方法。经常使用的几种机械分词方法以下:
    1)正向最大匹配法(由左到右的方向);
    2)逆向最大匹配法(由右到左的方向);
    3)最少切分(使每一句中切出的词数最小)。

    还能够将上述各类方法相互组合,例如,能够将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。因为汉语单字成词的特色,正向最小匹配和逆向最小匹配通常不多使用。通常说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果代表,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能知足实际的须要。实际使用的分词系统,都是把机械分词做为一种初分手段,还需经过利用各类其它的语言信息来进一步提升切分的准确率。
    一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明显特征的词,以这些词做为断点,可将原字符串分为较小的串再来进机械分词,从而减小匹配的错误率。另外一种方法是将分词和词类标注结合起来,利用丰富的词类信息对分词决策提供帮助,而且在标注过程当中又反过来对分词结果进行检验、调整,从而极大地提升切分的准确率。

    二、基于理解的分词方法
    这种分词方法是经过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它一般包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统能够得到有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法须要使用大量的语言知识和信息。因为汉语语言知识的笼统、复杂性,难以将各类语言信息组织成机器可直接读取的形式,所以目前基于理解的分词系统还处在试验阶段。

    三、基于统计的分词方法
    从形式上看,词是稳定的字的组合,所以在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。所以字与字相邻共现的频率或几率可以较好的反映成词的可信度。能够对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。定义两个字的互现信息,计算两个汉字X、Y的相邻共现几率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,即可认为此字组可能构成了一个词。

    这种方法只需对语料中的字组频度进行统计,不须要切分词典,于是又叫作无词典分词法或统计取词方法。但这种方法也有必定的局限性,会常常抽出一些共现频度高、但并非词的经常使用字组,例如“这一”、“之一”、“有的”、“个人”、“许多的”等,而且对经常使用词的识别精度差,时空开销大。实际应用的统计分词系统都要使用一部基本的分词词典(经常使用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特色,又利用了无词典分词结合上下文识别生词、自动消除歧义的优势。

    到底哪一种分词算法的准确度更高,目前并没有定论。对于任何一个成熟的分词系统来讲,不可能单独依靠某一种算法来实现,都须要综合不一样的算法。我的了解,海量科技的分词算法就采用“复方分词法”,所谓复方,至关于用中药中的复方概念,即用不一样的药才综合起来去医治疾病,一样,对于中文词的识别,须要多种算法来处理不一样的问题。

四、系统架构

  • 全文检索

    全文检索的方法主要分为按字检索和按词检索两种。按字检索是指对于文章中的每个字都创建索引,检索时将词分解为字的组合。对于各类不一样的语言而言,字有不一样的含义,好比英文中字与词其实是合一的,而中文中字与词有很大分别。按词检索指对文章中的词,即语义单位创建索引,检索时按词检索,而且能够处理同义项等。英文等西方文字因为按照空白切分词,所以实现上与按字处理相似,添加同义处理也很容易。中文等东方文字则须要切分字词,以达到按词索引的目的,关于这方面的问题,是当前全文检索技术尤为是中文全文检索技术中的难点,在此不作详述。

    全文检索系统是按照全文检索理论创建起来的用于提供全文检索服务的软件系统。通常来讲,全文检索须要具有创建索引和提供查询的基本功能,此外现代的全文检索系统还须要具备方便的用户接口、面向WWW的开发接口、二次应用开发接口等等。功能上,全文检索系统核心具备创建索引、处理查询返回结果集、增长索引、优化索引结构等等功能,外围则由各类不一样应用具备的功能组成。结构上,全文检索系统核心具备索引引擎、查询引擎、文本分析引擎、对外接口等等,加上各类外围应用系统等等共同构成了全文检索系统。图1.1展现了上述全文检索系统的结构与功能。

    在上图中,咱们看到:全文检索系统中最为关键的部分是全文检索引擎,各类应用程序都须要创建在这个引擎之上。一个全文检索应用的优异程度,根本上由全文检索引擎来决定。所以提高全文检索引擎的效率便是咱们提高全文检索应用的根本。

  • 搜索引擎与全文检索的区别

    搜索引擎的门槛到底有多高?搜索引擎的门槛主要是技术门槛,包括网页数据的快速采集、海量数据的索引和存储、搜索结果的相关性排序、搜索效率的毫秒级要求、分布式处理和负载均衡、天然语言的理解技术等等,这些都是搜索引擎的门槛。对于一个复杂的系统来讲,各方面的技术当然重要,但整个系统的架构设计也一样不可忽视,搜索引擎也不例外。

    搜索引擎的技术基础是全文检索技术,从20世纪60年代,国外对全文检索技术就开始有研究。全文检索一般指文本全文检索,包括信息的存储、组织、表现、查询、存取等各个方面,其核心为文本信息的索引和检索,通常用于企事业单位。随着互联网信息的发展,搜索引擎在全文检索技术上逐渐发展起来,并获得普遍的应用,但搜索引擎仍是不一样于全文检索。搜索引擎和常规意义上的全文检索主要区别有如下几点:
  一、数据量
  传统全文检索系统面向的是企业自己的数据或者和企业相关的数据,通常索引库规模多在GB级,数据量大的也只有几百万条;但互联网网页搜索须要处理几十亿的网页,搜索引擎的策略都是采用服务器群集和分布式计算技术。
  二、内容相关性
  信息太多,查准和排序就特别重要,Google等搜索引擎采用网页连接分析技术,根据互联网上网页被连接次数做为重要性评判的依据;但全文检索的数据源中相互连接的程度并不高,不能做为判别重要性的依据,只能基于内容的相关性排序。
  三、安全性
  互联网搜索引擎的数据来源都是互联网上公开的信息,并且除了文本正文之外,其它信息都不过重要;但企业全文检索的数据源都是企业内部的信息,有等级、权限等限制,对查询方式也有更严格的要求,所以其数据通常会安全和集中地存放在数据仓库中以保证数据安全和管理的要求。
  四、个性化和智能化

  搜索引擎面向的是互联网访问者,因为其数据量和客户数量的限制,天然语言处理技术、知识检索、知识挖掘等计算密集的智能计算技术很难应用,这也是目前搜索引擎技术努力的方向;而全文检索数据量小,检索需求明确,客户量少,在智能化和个性可走得更远。

  • 搜索引擎的系统架构

    这里主要针对全文检索搜索引擎的系统架构进行说明,下文中提到的搜索引擎若是没有特殊说明也是指全文检索搜索引擎。搜索引擎的实现原理,能够看做四步:从互联网上抓取网页→创建索引数据库→在索引数据库中搜索→对搜索结果进行处理和排序。  
  一、从互联网上抓取网页
  利用可以从互联网上自动收集网页的网络蜘蛛程序,自动访问互联网,并沿着任何网页中的全部URL爬到其它网页,重复这过程,并把爬过的全部网页收集到服务器中。

  二、创建索引数据库
  由索引系统程序对收集回来的网页进行分析,提取相关网页信息(包括网页所在URL、编码类型、页面内容包含的关键词、关键词位置、生成时间、大小、与其它网页的连接关系等),根据必定的相关度算法进行大量复杂计算,获得每个网页针对页面内容中及超链中每个关键词的相关度(或重要性),而后用这些相关信息创建网页索引数据库。

  三、在索引数据库中搜索
  当用户输入关键词搜索后,分解搜索请求,由搜索系统程序从网页索引数据库中找到符合该关键词的全部相关网页。

  四、对搜索结果进行处理排序
  全部相关网页针对该关键词的相关信息在索引库中都有记录,只需综合相关信息和网页级别造成相关度数值,而后进行排序,相关度越高,排名越靠前。最后由页面生成系统将搜索结果的连接地址和页面内容摘要等内容组织起来返回给用户。

  下图是一个典型的搜索引擎系统架构图,搜索引擎的各部分都会相互交错相互依赖。其处理流程按照以下描述:

  “网络蜘蛛”从互联网上抓取网页,把网页送入“网页数据库”,从网页中“提取URL”,把URL送入“URL数据库”,“蜘蛛控制”获得网页的URL,控制“网络蜘蛛”抓取其它网页,反复循环直到把全部的网页抓取完成。

  系统从“网页数据库”中获得文本信息,送入“文本索引”模块创建索引,造成“索引数据库”。同时进行“连接信息提取”,把连接信息(包括锚文本、连接自己等信息)送入“连接数据库”,为“网页评级”提供依据。

  “用户”经过提交查询请求给“查询服务器”,服务器在“索引数据库”中进行相关网页的查找,同时“网页评级”把查询请求和连接信息结合起来对搜索结果进行相关度的评价,经过“查询服务器”按照相关度进行排序,并提取关键词的内容摘要,组织最后的页面返回给“用户”。

  • 搜索引擎的索引和搜索

    下面我们以Google搜索引擎为例主要介绍搜索引擎的数据索引和搜索过程。

  数据的索引分为三个步骤:网页内容的提取、词的识别、标引库的创建。

  互联网上大部分信息都是以HTML格式存在,对于索引来讲,只处理文本信息。所以须要把网页中文本内容提取出来,过滤掉一些脚本标示符和一些无用的广告信息,同时记录文本的版面格式信息。词的识别是搜索引擎中很是关键的一部分,经过字典文件对网页内的词进行识别。对于西文信息来讲,须要识别词的不一样形式,例如:单复数、过去式、组合词、词根等,对于一些亚洲语言(中文、日文、韩文等)须要进行分词处理。识别出网页中的每一个词,并分配惟一的wordID号,用于为数据索引中的标引模块服务。

  标引库的创建是数据索引中结构最复杂的一部分。通常须要创建两种标引:文档标引和关键词标引。文档标引分配每一个网页一个惟一的docID号,根据docID标引出在这个网页中出现过多少过wordID,每一个wordID出现的次数、位置、大小写格式等,造成docID对应wordID的数据列表;关键词标引实际上是对文档标引的逆标引,根据wordID标引出这个词出如今那些网页(用wordID表示),出如今每一个网页的次数、位置、大小写格式等,造成wordID对应docID的列表。

  搜索的处理过程是对用户的搜索请求进行知足的过程,经过用户输入搜索关键字,搜索服务器对应关键词字典,把搜索关键词转化为wordID,而后在标引库中获得docID列表,对docID列表进行扫描和wordID的匹配,提取知足条件的网页,而后计算网页和关键词的相关度,根据相关度的数值返回前K篇结果(不一样的搜索引擎每页的搜索结果数不一样)返回给用户。若是用户查看的第二页或者第多少页,从新进行搜索,把排序结果中在第K+1到2*K的网页组织返回给用户。其处理流程以下图所示:

五、排序技术

  • Google成功的秘密
    到2004年为止,Google( http://www.google.com )已经连续两年被评为全球第一品牌,Google成立仅五年时间,最初只是两个斯坦福大学学生的研究项目。这不能不说是一个奇迹,就像比尔?盖茨创制奇迹同样。比尔?盖茨能创造奇迹,是由于他看准了我的计算机软件市场的趋势,因此建立的公司叫Microsoft(微软):Micro(小)Soft(软件)。那么Google呢?在Google出来以前已经有一些颇有成就的搜索引擎公司,其实力也很强,看来不仅是Google看见了搜索的趋势。Google究竟成功的秘密在哪儿?

    Google的成功有许多因素,最重要的是Google对搜索结果的排序比其它搜索引擎都要好。Google保证让绝大部分用搜索的人,都能在搜索结果的第一页找到他想要的结果。客户获得了知足,下一次还过来,并且会向其余人介绍,这一来一往,使用的人就多了。因此Google在没有作任何广告的前提下,让本身成为了全球最大的品牌。Google究竟采用了哪一种排序技术?PageRank,即网页级别。

    Google有一个创始人叫Larry Page,听说PageRank的专利是他申请的,因而依据他的名字就有了Page Rank。国内也有一家很成功的搜索引擎公司,叫百度( http://www.baidu.com )。百度的创始人李彦宏说,早在1996年他就申请了名为超链分析的专利,PageRank的原理和超链分析的原理是同样的,并且PageRank目前还在Paten-pending(专利申请中)。言下之意是这里面存在专利全部权的问题。这里不讨论专利全部权,只是从中可看出,成功搜索引擎的排序技术,就其原理上来讲都差很少,那就是连接分析。超链分析和PageRank都属于连接分析。

    连接分析到底为什么物?因为李彦宏的超链分析没有具体的介绍,笔者惟一看过的就是在美国专利局网站上关于李彦宏的专利介绍。PageRank的介绍却是很多,并且目前Google毕竟是全球最大的搜索引擎,这里以PageRank为表明,详细介绍连接分析的原理。
  • PageRank揭秘
    PageRank的原理相似于科技论文中的引用机制:谁的论文被引用次数多,谁就是权威。说的更白话一点:张三在谈话中提到了张曼玉,李四在谈话中也提到张曼玉,王五在谈话中还提到张曼玉,这就说明张曼玉必定是颇有名的人。在互联网上,连接就至关于“引用”,在B网页中连接了A,至关于B在谈话时提到了A,若是在C、D、E、F中都连接了A,那么说明A网页是最重要的,A网页的PageRank值也就最高。

    如何计算PageRank值有一个简单的公式 :

    其中:系数为一个大于0,小于1的数。通常设置为0.85。网页一、网页2至网页N表示全部连接指向A的网页。

由以上公式能够看出三点 :

  1. 连接指向A的网页越多,A的级别越高。即A的级别和指向A的网页个数成正比,在公式中表示,N越大, A的级别越高;
  2. 连接指向A的网页,其网页级别越高, A的级别也越高。即A的级别和指向A的网页本身的网页级别成正比,在公式中表示,网页N级别越高, A的级别也越高;
  3. 连接指向A的网页,其链出的个数越多,A的级别越低。即A的级别和指向A的网页本身的网页链出个数成反比,在公式中现实,网页N链出个数越多,A的级别越低。
    每一个网页有一个PageRank值,这样造成一个巨大的方程组,对这个方程组求解,就能获得每一个网页的PageRank值。互联网上有上百亿个网页,那么这个方程组就有上百亿个未知数,这个方程虽然是有解,但计算毕竟太复杂了,不可能把这全部的页面放在一块儿去求解的。对具体的计算方法有兴趣的朋友能够去参考一些数值计算方面的书。

    总之,PageRank有效地利用了互联网所拥有的庞大连接构造的特性。 从网页A导向网页B的连接,用Google创始人的话讲,是页面A对页面B的支持投票,Google根据这个投票数来判断页面的重要性,但Google除了看投票数(连接数)之外,对投票者(连接的页面)也进行分析。「重要性」高的页面所投的票的评价会更高,由于接受这个投票页面会被理解为「重要的物品」。

六、图片搜索原理

    早有网友阮一峰介绍了一个简单的图片搜索原理,可分为下面几步:

  1. 缩小尺寸。将图片缩小到8x8的尺寸,总共64个像素。这一步的做用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不一样尺寸、比例带来的图片差别。
  2. 简化色彩。将缩小后的图片,转为64级灰度。也就是说,全部像素点总共只有64种颜色。
  3. 计算平均值。计算全部64个像素的灰度平均值。
  4. 比较像素的灰度。将每一个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
  5. 计算哈希值。将上一步的比较结果,组合在一块儿,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证全部图片都采用一样次序就好了。
    这种方法对于寻找如出一辙的图片是有效的,但并不可以去搜索“类似”的照片,也不能局部搜索,好比从一我的的单人照找到这我的与别人的合影。这些Google Images都能作到。

    其实早在2008年,Google公布了一篇图片搜索的论文(PDF版),和文本搜索的思路是同样的:

  1. 对于每张图片,抽取其特征。这和文本搜索对于网页进行分词相似。
  2. 对于两张图片,其相关性定义为其特征的类似度。这和文本搜索里的文本相关性也是差很少的。
  3. 图片同样有image rank。文本搜索中的page rank依靠文本之间的超连接。图片之间并不存在这样的超连接,image rank主要依靠图片之间的类似性(两张图片类似,便认为它们之间存在超连接)。具备更多类似图片的图片,其image rank更高一些。

七、开源搜索引擎

全文检索引擎 Sphinx

    关注本博客的读者不知是否还记得曾经出如今这篇文章从几幅架构图中偷得半点海量数据处理经验中的两幅图,以下所示:

    上图出自俄罗斯的开源全文搜索引擎软件Sphinx,单一索引最大可包含1亿条记录,在1千万条记录状况下的查询速度为0.x秒(毫秒级)。Sphinx建立索引的速度为:建立100万条记录的索引只需3~4分钟,建立1000万条记录的索引能够在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

     基于以上几点,一网友 回忆将来-张宴设计出了这套搜索引擎架构。在生产环境运行了一周,效果很是不错。有时间我会专为配合Sphinx搜索引擎,开发一个逻辑简单、速度快、占用内存低、非表锁的MySQL存储引擎插件,用来代替MyISAM引擎,以解决MyISAM存储引擎在频繁更新操做时的锁表延迟问题。另外,分布式搜索技术上已无任何题。

 

    Sphinx是一个基于SQL的全文检索引擎,能够结合MySQL,PostgreSQL作全文搜索,它能够提供比数据库自己更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。

C++检索引擎 Xapian

    Xapian 是一个用C++编写的全文检索程序,他的做用相似于Java的lucene。尽管在Java世界lucene已是标准的全文检索程序,可是C/C++世界并无相应的工具,而 Xapian 则填补了这个缺憾。 
    Xapian 的api和检索原理和lucene在不少方面都很类似,可是也有一些地方存在不一样,具体请看 Xapian 本身的文档:http://www. xapian .org/docs/ 
    Xapian 除了提供原生的C++编程接口以外,还提供了Perl,PHP,Python和Ruby编程接口和相应的类库,因此你能够直接从本身喜欢的脚本编程语言当中使用 Xapian 进行全文检索了。

Java搜索引擎 Lucene

    Lucene是一套用于全文检索和搜寻开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单确强大的应用程式接口,可以作全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其自己而论,Lucene是如今而且是这几年,最受欢迎的免费java资讯检索程式库。人们常常提到资讯检索程式库,就像是搜寻引擎,可是不该该将资讯检索程式库与网搜索引擎相混淆。

    Lucene最初是由Doug Cutting所撰写的,是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎的主要开发者,后来在Excite担任高级系统架构设计师,目前从事 于一些INTERNET底层架构的研究。他贡献出Lucene的目标是为各类中小型应用程式加入全文检索功能。

C++搜索引擎 CLucene

    CLucene是Lucene的一个C++端口,Lucene是上面所讲到的一个基于java的高性能的全文搜索引擎。CLucene由于使用C++编写,因此理论上要比lucene快。

搜索引擎 Nutch

    Nutch 是一个开源Java 实现的搜索引擎。它提供了咱们运行本身的搜索引擎所需的所有工具。包括全文搜索和Web爬虫。

    尽管Web搜索是漫游Internet的基本要求, 可是现有web搜索引擎的数目却在降低. 而且这颇有可能进一步演变成为一个公司垄断了几乎全部的web搜索为其谋取商业利益.这显然 不利于广大Internet用户.

    Nutch为咱们提供了这样一个不一样的选择. 相对于那些商用的搜索引擎, Nutch做为开放源代码 搜索引擎将会更加透明, 从而更值得你们信赖. 如今全部主要的搜索引擎都采用私有的排序算法, 而不会解释为何一个网页会排在一个特定的位置. 除此以外, 有的搜索引擎依照网站所付的 费用, 而不是根据它们自己的价值进行排序. 与它们不一样, Nucth没有什么须要隐瞒, 也没有 动机去扭曲搜索的结果. Nutch将尽本身最大的努力为用户提供最好的搜索结果.

    Nutch 致力于让每一个人能很容易, 同时花费不多就能够配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, Nutch必须可以作到:

  • 每月取几十亿网页
  • 为这些网页维护一个索引
  • 对索引文件进行每秒上千次的搜索
  • 提供高质量的搜索结果
  • 以最小的成本运做
    写博客是一种学习的过程,即使只是参考他人文章的整理总结,也能借鉴他人的经验,一箭双雕,有何不敢。ok,后续会研究开源搜索引擎的架构设计与源码学习。搜索引擎技术交流群:172114338本文完。