首先要区分搜索引擎和搜索的区别,更多的时候我们在需要的仅仅是对数据库的搜索。而搜索引擎则是个相对独立的系统,他提供的是一个相对完整的服务。
作为一个商业级别的搜索引擎,一般需要以下技术:
1. 全文检索引擎
在全文信息中按一定的组合费率检索用户输入的关键词,并按照相关度提供返回索引序号,以便于页面程序获取数据进行分页显示。作为一个专业搜索引擎,对于全文检索引擎的要求比较苛刻。首先,必须在1秒以内返回搜索结果(非页面显示时间)。其次,确保前100条数据最符合用户需求。因为搜索引擎是个并发率和负载非常高的系统,所以每个搜索任务的效率就显得非常关键。而根据用户的习惯,一般很少有人会翻页到第5页以后,因此前100条结果对于搜索引擎的质量显得尤为重要。
目前开源全文检索引擎方面做得最好的应该是 Lucene 了。
2. 中文分词技术
由于中文并不具备英文与生俱来的分词优势,因此在中文搜索引擎中中文分词是一个非常关键的技术。一般情况下,全文检索引擎为提高效率,会将中文信息采取单字索引的方式存储,以减小索引库大小,并提高索引效率。而其内置的检索算法并不能完全适合中文搜索。我们可以使用“IBM笔记本电脑硬盘”这样一个关键词去一些搜索引擎测试,会发现没有内置中文分词的搜索引擎检索结果都不理想,甚至没有返回结果。一旦内置中文分词,我们就可以将其拆解为“IBM 笔记本 电脑 硬盘”,如此一来就可以通过“或”的关系最大程度获取最接近的检索结果。一个理想的中文分词技术,并不完全是以分词准确性为指标的。因为搜索引擎所需要的分词毕竟和专业级别的那些用来进行机器翻译或者人工智能不同,它所面对的是相对较小的分词语句,因此需要在准确性和性能上达到一个平衡。
3. 信息采集爬虫
作为信息采集手段,爬虫的效率尤为重要。一般情况下,多个爬虫会采取军团方式进行协作,他们会沿着一个路径进行下去,将获取的有效数据分拣解析,最后提交给系统进行索引存储。因为实现技术各有不同,再次不做细说。只是其中有些关键的地方在此罗列一下:
. 爬虫应该有自己唯一且固定的名字,方便目标网站进行流量统计和分析。
. 爬虫必须遵循一定的准则,国际惯例是在网站根目录下放至 robots.txt 文件用来指示爬虫的动作。
. 严格检查循环路径和爬虫陷阱,避免造成目标网站瘫痪。
. 限制爬虫采集时间,避开目标网站的运营高峰时间。