1057 Search Engine是大厂候选人队参加2022年字节跳动青训营实现的课程大项目。
- 修改application.properties中的MySQL的用户名和密码。新建一个数据库,运行search-engine-sql下面的四个文件,创建四个表。
- 将悟空数据集的数据导入到data表中。
- 运行search-engine-spring-boot\src\test\java\com\searchengine\springboot\segmentation\addAllSeg.java中的addSegs方法,用于添加分词,再运行addAllSegUseSplit方法,用于创建关系表。(注意修改loop,data表中有多少数据就添加多少)
Vue,Element UI
Spring Boot,MySQL,MyBatis,Spring Security,Redis, PyTorch
- 支持搜索存文本信息。
- 支持用户自定义关键字过滤。
- 支持搜索结果按条目分页展示。
- 实现了关联度算法,把关联度高的信息优先展示。
- 支持“相关搜索”功能。
- 支持搜索时搜索下拉框联想词推荐。
- 支持用户注册、登录、注销。
- 支持用户收藏夹功能。
- 用户可以新增、删除、重命名个人收藏夹。
- 用户可以收藏搜索结果里的一条或多条结果,放入其中一个收藏夹。
- 用户可以删除收藏夹里的内容。
- 支持搜索图片
- 用户输入纯文本,根据纯文本搜索出关联的图片数据。
- 图片搜索结果以缩略图展示,支持点击打开原图。
- 支持以图搜图
- 用户上传一张图片,可以搜索出关联的图片。
- 分词采用开源的jieba分词库。首先将悟空数据集所有的文本数据进行分词创建倒排索引,并建立分词-文本关系表。
- 关联度算法最先采用在数据库里查询分词(关联词)的方式,现在优化成采用tfidf算法。
- 关键词过滤类似谷歌搜索"-过滤词"的方式,使用正则匹配校验是否为过滤词,支持多个过滤词。
- 为了加快搜索速度,使用布隆过滤、B+树索引以及分表来进行优化。
- 搜索时搜索下拉框联想词推荐使用Trie树(也称前缀树)实现。
- 以图搜图采用CLIP预训练模型对图像进行编码提取特征,通过特征之间余弦相似度搜索相似图片。
- 登录、注销采用Spring Security + JWT + Redis,利用用户的id生成token签名,并存储在Redis中,每一次写操作都要查询token签名是否存在。
模块 | ||
---|---|---|
首页&下拉框联想词推荐 | ||
搜索结果:文本&缩略图 | ||
分页展示&相关搜索 | ||
搜索过滤:过滤前&过滤后 | ||
用户注册&用户登录 | ||
收藏夹&添加到收藏夹 | ||
以图搜图 |