其实要看你的具体目标需求是什么,是互联网通用的搜索引擎服务,还是一个基于已有数据库的搜索引擎插件,这二者涵盖的范畴是不同的。
简单说一下搜索引擎的模块
第一部分是 服务端的的索引系统。
将内容分词,分块建立索引,并基于一定的算法给予权值,用于查询的排序。
这里又存在结构化与非结构化,结构化就是你的索引与固定结构有关,非结构化就是不管哪里出现一视同仁。
举例,你搜一所小说,可以选择搜索作者还是搜索内容,这就是结构化,将作者和内容分开了。如果非结构化就是哪里出现都给搜出来。
服务端索引系统通常是非实时的,需要耗费一定的时间完成所有内容的索引,但是目前很多情况下需要追求索引效率,所以有方案是分成两块,一块是整体的索引重建和权值计算(权值算法一旦调整,或者一些新的数据加入后,往往会影响全局的权值计算。) 一块是高效率的增量索引,方便快速满足更新内容的查询请求。
第二部分是查询系统
也就是基于搜索词或者搜索选项,通过索引库快速查询和排序,然后有可能再涉及基于索引查出来的一些编号去调用一些源记录信息,整理后展现给用户。
这里又涉及了缓存的使用,排序的逻辑以及搜索请求的处理。
缓存就是为简化海量重复查询带来的系统压力,基本忽略。
排序的逻辑可能是基于权值,也可能是用户选择(比如新闻搜索可以选择按照时间排序)。
搜索请求如果是长串字符串,可能需要分词,以及确定哪些是忽略词,哪些是核心词。等等
如果是基于已有的数据库建立搜索系统,这样两大部分基本就够了。
但如果想追求进一步的逼格,可以考虑增加一个数据统计和分析后台,并与权值系统结合,比如基于用户点击率做权值调整,比如基于点击排名分布做权值算法的优化。
如果是要从互联网获得数据,那么就还需要一个蜘蛛系统,
选择一些典型的数据源,基于链接或其他方法,遍历网页或数据,并做数据的前期处理以及入库。