这是我参与「第三届青训营 -后端场」笔记创作活动的的第8篇笔记
一、项目介绍
我们小组本次青训营选题为搜索引擎项目, 详情可戳搜索引擎项目Github,构建了一个具备基础功能的搜索引擎,能够让用户通过图形化界面搜索文本信息,实现的具体功能有:
1.1 业务功能
- 纯文本信息的存储
- 搜索纯文本信息
- 用户自定义关键词过滤
- 搜索结果按条目分页展示
- “相关搜索”功能,给出可能的关联条目
- 实现关联度算法,优先向用户展示关联度较高的信息
1.2 项目概述
小组内部使用GitHub协同开发,后端开发基于 Python 的 bottle 框架,一个轻量级的 Python Web 框架, 可以适配各种 Web 服务器;数据库采用 SQLite3;数据集使用 悟空数据集。
1.2.1 用户界面/演示视频
-
主界面
-
搜索结果界面:其中可以关键词搜索,词过滤,搜索结果是按照相关度排序后展示的,左侧展示出相关词语搜索推荐,底部可切换页码。右侧展示出搜索结果,最开始为搜索结果数量和时间,每个搜索结果中“点击此处查看图片”可以查看对应图片。
1.2.2 项目架构
暂时无法在飞书文档外展示此内容
项目架构图
暂时无法在飞书文档外展示此内容
服务器端流程图
1.2.3 核心算法
- 索引计算
对数据集中的数据进行预处理:首先对 title 进行分词,得到关键词,建立正向索引,然后将关键词与 id 和页面文档 url 进行绑定,建立反向索引 。
暂时无法在飞书文档外展示此内容
- 相关数据库设计:
-
-
page_info 表
-
id keyword url title 1 example example.com A example search
-
-
page_index 表
-
id keyword page_id 1 example 1
-
-
- 关联度计算
关联度表征了用户的搜索文本与搜索结果的匹配程度,在获取到用户的搜索关键字之后,进行搜索结果的关联度计算,本项目使用余弦相似度作为关联度的计算方法:
- 相关度计算
相关度用于衡量相关搜索与用户输入文本的相关程度,在具体实现中,调用了开源语料库 hanlp 的模型。
二、心得体会
通过参加本项目,组内成员经历了从技术学习、需求分析、界面数据库等详细设计到代码实现、软件测试与修改,这一个完整的搜索引擎项目开发生命周期,小组内分工明确,工作有序,氛围良好,认真努力。
大家都能很好的找到工作中的定位,完成自己的任务,当遇到技术问题时,我们都会踊跃思考与讨论去解决问题。在本次项目中,我们不仅收获了满满的技术干货,丰富了个人技能,同时也切实体验到真实的工作环境与氛围,体会到团结与合作的魅力。
最后,非常感谢字节跳动给予这次项目实践的机会,后续我们会继续把项目优化,使用效率更高的数据结构算法、性能更好的Go语言以及具有缓存机制的存储引擎,来完善具有更多功能的、效率更高的搜索引擎。
三、项目总结
亮点
- 代码可迁移性强
- 支持用户多关键词搜索
- 支持关键词高亮
不足
- 开发周期短,功能有待完善
- 代码结构优化
- 算法单一
- 倒排索引数据库结构没有使用非关系型数据库
改进方向
- 支持用户登录注册等功能
- 支持搜索图片 、用户收藏夹
- 算法方面、存储方面