个人小项目:搜索引擎1代

317 阅读2分钟

Java 搜索栏

流程图

登录流程图

image-20220530225028343

注册

image-20220531185630436

用户搜索流程

image-20220604224623320

Google分数=(相关关键词分数X0.3)+(域名权重X0.25)+(外链分数X0.25)+(用户数据X0.1)+(内容质量分数X0.1)+(人工加分)-(自动或人工降分)

用户搜索的关键就在于分词+倒排索引

  1. 用户输入搜索语句
  2. 通过语句中是否有英文来判断使用智能分词还是完全分词
  3. 如果用户输入语句经过查询之后在 mgdb 中没有对应的 url,将提示用户没有对应的网址。
  4. 如果有,则将分词结果作为查询关键字,在 mgdb 中进行查询
  5. 将查询得到的 url 进行优先级排序,优先级高的优先显示
  6. 如果有则将排序后的查询结果返回的到前端。
  7. 通过 url : caption 的 json 返回。

url 排序

  1. 首先对搜索结果根据关键字排序
  2. 根据域名权重排序

如果搜索结果小于等于100,所有的搜索结果进行 url 排序。

如果搜索结果大于100,优先对关键字排序的前100进行 url 排序。

双链——>map+优先队列——>堆——> 图 ——> 归并+二分查找 ——> 平衡二叉树 ——> 红黑树 ——> treeMap——> treeSet

关键字排序

  1. 对用户的搜索语句进行分词
  2. 对分词结果在 mgdb 内进行查询
  3. 当网址被第一次搜索到的时候,计算其域名权重。然后添加人工加分
  4. 网址每包含一个关键字便加十分
  5. 所用有关搜索结果的网址都进行了计算之后,根据权重由大到小进行排序。当出现排序一致的时候,根据默认的优先级显示

使用 redis 存储

域名权重计算

  1. 每天计算网址访问的次数
  2. 每访问一次加1分
  3. 每天凌晨都将当天的的域名权重×0.25

使用数据库保存

测试用例

email:1059217325@qq.com

phone:11122223333

password:123456abcABC