搜索引擎大作业的一些基础总结 | 青训营笔记

311 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记

前言

这次字节跳动后端青训营我们队伍选择的是搜索引擎大作业,因为我们是四个大一组队,之前对搜索引擎只有使用的体验,毫无开发的想法,所以这算是一种对全新领域的了解和尝试了。

数据源

虽然在需求文档里老师提供了华为的诺亚悟空数据库,但那个只有图片url和title,并不能用于文本搜索,所以我们选择了一个开源的python库Scrapy来爬取最近两年人民日报的每一篇报道,保存在MySQL数据库内。

搜索准备

首先我们选择的分词库是jieba(虽然这个库有一些小问题,在我第一篇笔记里提出并解决了)。

我们做的第一件事是把爬来的数据(存于doc_raws表中)的title切词,并以切得的词为索引,把每一篇报道的id存入doc_ids表中,表的结构如下:

wordids
stringstring

ids字段里保存的是用,分隔的多个含有本词的数据id。

搜索

搜索的流程是先切好搜索词,然后以得到的词为线索在doc_ids表中查询并切片,然后统计每一个id出现的次数,进行排序(这里就是很简易的线性相关度),然后去doc_raws表中取出某一页所需的十条数据,打包传给前端。

相关搜索

因为才疏学浅,没接触过机器学习,所以我们在相关搜索的映射有效处理上选择的是无脑全部接受。

前端会在搜索时判断是否有搜索历史,如果不是第一次搜索就会将前一次与本次搜索词一齐传给后端,后端保存并记权重为1,之后每次搜索一样的两个词就在权重上加1。

最后在搜索某词时返回它权重最大的六个相关搜索词。