搜索引擎需要解决的技术问题总的分为蜘蛛程序+分类建立索引+词库+排序算法因素+数据库索引和优化+数据库结构
一,蜘蛛。目前看来,蜘蛛可以用C或者PHP来实现。百度的蜘蛛多半是C做的,C同样可以支持多个数据库的连接接口,并且C的运行效率比PHP高,C也更能控制底层。C虽然这么好,我还是想用PHP做。时间上必须更多的节约出来,不能再去学C。如果以后需要高效率要用C,再用C做。数据库可以不变,MYSQL可以和C连接。PHP有优点也有缺点,做蜘蛛,问题应该不大。最大的问题是有可能速度很慢。抓取网页,有可能出现的问题是,抓取顺序,抓取如果不成功或超时等问题该如何纪录,下次又什么时候更新抓取。搜索引擎的数据库最开始是新的,没有任何网址的,需要大量加入网址。这里可以用for循环语句,按照英文字母自动循环。当然,网站不只有英文,还有-和数字,这些只能手工输入了。如果还是循环抓取,估计有很多都要落空。抓到的代码需要分析编码类型是utf-8还是gb2312.我的搜索引擎只想抓简体中文。如果抓取超时,则记录,下次大概十天之后再抓取,如果连续超时三次,将T出数据库。
二,索引的建立是个很棘手的问题。百度和谷歌可以用自己的服务器群建立分布式的服务器。我可没那么多服务器。所以我想换个方法。建立静态页面。之前我才知道,在百度和谷歌输入一个比较生僻的词,会花费0.2秒左右的时间,一般的常见词语只需要0.1秒。并且,第二次重复输入一个词所需要的查询时间要少得多。这个多半就是索引的影响。假如索引是放内存里,读取速度将是非常OK的。我只有一台服务器,就算只放常见的5万个查询词语的索引进去,估计也有点累。一个页面至少有20K,5万个页面就是20K*50=1G。这还只是5万个词的第一个页面。如果用户要翻页查询呢,内存肯定不够。假如只放第一页进内存,用户翻页查询,速度将无法解决。所以我准备全静态。把5万个词语的查询模拟一次,然后生成静态页面。所有词的第一页放内存,后面的页面放硬盘里。如果能把页面放内存,这个问题就已经解决了。
三,词库。汉字千千万,常用的汉字也至少三千个。组成的词语常用的估计有2万。这个词库来怎么添加进去?用什么格式存放?CSV文件还是数据库还是文本文件?之前我想过把金山词霸的词库文件找到,想办法直接复制过来,此方法目前还没成功。
四,所有的影响排序的算法,应该是放一个表里。然后分固定算法,就是网站本身的因素,还有变动算法,就是用户输入的词语或因为时间季节等不同而变化的因素。固定算法就放一个表里,对每个网站算出总分。变动算法的一部分是之前已经产生,一部分是用户输入之后才算出。
五,数据库的索引目前还没有很好的解决办法。一个表达索引肯定不能太多,多了会影响速度。
六,数据库的结构。这个很关键。估计要在网站前台界面出来之前就得先把数据库结构定下来。还要为以后的升级留下接口,比如算法因素要增加,或者为了优化查询语句,要变动字段等等。初步结构是这样的。1-3个表存放网站信息。第一个字段是自增的主键,第二个字段是网站首页地址,依次排下去是网站域名注册时间,收录时间,上次快照时间,收录页面总数,首页字节数,域名分类(com/cn/org/net/gov/edu),反向链接总数,网站分类(这个可以是1-10个,门户站可以扩大到30个)等。