Skip to content

该项目是大厂候选人队参加2022年字节跳动青训营实现的课程大项目。

Notifications You must be signed in to change notification settings

xuyi0130/bytedance-youthcamp-search-engine

 
 

Repository files navigation

过段时间有空了将所有的索引放到内存中。这里参考ES的实现,自己实现简易的FST以及压缩算法。

项目简介

1057 Search Engine是大厂候选人队参加2022年字节跳动青训营实现的课程大项目。

项目运行

  1. 修改application.properties中的MySQL的用户名和密码。新建一个数据库,运行search-engine-sql下面的四个文件,创建四个表。
  2. 将悟空数据集的数据导入到data表中。
  3. 运行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

功能说明

  1. 支持搜索存文本信息。
  2. 支持用户自定义关键字过滤。
  3. 支持搜索结果按条目分页展示。
  4. 实现了关联度算法,把关联度高的信息优先展示。
  5. 支持“相关搜索”功能。
  6. 支持搜索时搜索下拉框联想词推荐。
  7. 支持用户注册、登录、注销。
  8. 支持用户收藏夹功能。
    • 用户可以新增、删除、重命名个人收藏夹。
    • 用户可以收藏搜索结果里的一条或多条结果,放入其中一个收藏夹。
    • 用户可以删除收藏夹里的内容。
  9. 支持搜索图片
    • 用户输入纯文本,根据纯文本搜索出关联的图片数据。
    • 图片搜索结果以缩略图展示,支持点击打开原图。
  10. 支持以图搜图
    • 用户上传一张图片,可以搜索出关联的图片。

技术说明

  1. 分词采用开源的jieba分词库。首先将悟空数据集所有的文本数据进行分词创建倒排索引,并建立分词-文本关系表。
  2. 关联度算法最先采用在数据库里查询分词(关联词)的方式,现在优化成采用tfidf算法
  3. 关键词过滤类似谷歌搜索"-过滤词"的方式,使用正则匹配校验是否为过滤词,支持多个过滤词。
  4. 为了加快搜索速度,使用布隆过滤、B+树索引以及分表来进行优化。
  5. 搜索时搜索下拉框联想词推荐使用Trie树(也称前缀树)实现。
  6. 以图搜图采用CLIP预训练模型对图像进行编码提取特征,通过特征之间余弦相似度搜索相似图片。
  7. 登录、注销采用Spring Security + JWT + Redis,利用用户的id生成token签名,并存储在Redis中,每一次写操作都要查询token签名是否存在。

演示图

模块
首页&下拉框联想词推荐 首页.png 首页1.png
搜索结果:文本&缩略图 s1.png s2.png
分页展示&相关搜索 s3.png
搜索过滤:过滤前&过滤后 s1.png s8.png
用户注册&用户登录 s4.png s5.png
收藏夹&添加到收藏夹 s6.png s7.png
以图搜图 XgoaEd.png XgonHJ.png

About

该项目是大厂候选人队参加2022年字节跳动青训营实现的课程大项目。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 69.4%
  • Vue 27.5%
  • Python 2.0%
  • Other 1.1%