Git Product home page Git Product logo

search-engine's Introduction

过段时间有空了将所有的索引放到内存中。这里参考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

search-engine's People

Contributors

ingffwe avatar zehao180267 avatar optimjie avatar sjgao-ch avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.